#2018-09-1013:08Rachel WestmacottI think you can do this in a platform independent way with Java interop using eg: (defn ->clipboard [text]
(let [ss (StringSelection. text)]
(-> (Toolkit/getDefaultToolkit) .getSystemClipboard (.setContents ss ss))))#2018-09-1013:39uwoI had used that, but preferred to not spin up the java task. Pollutes my alt-tabbing 😄#2018-09-1111:02flowthingI haven't used that, but wouldn't setting the java.awt.headless system property to true avoid the Alt+Tab pollution?#2018-09-1113:33Rachel Westmacottif you set it to headless you can’t use the clipboard: HeadlessException sun.awt.HeadlessToolkit.getSystemClipboard (HeadlessToolkit.java:309)#2018-09-0913:19rutledgepaulvAnnouncing [com.vodori/missing "0.1.0"]. Missing is a utility library for Clojure intended to complement what’s already available in clojure.core. It includes additional transducers; <, >, <=, >= variants that work on comparables not just numbers; lazy merge sort; functions for indexing collections into maps; locking on values; topological sorts; and more.
https://github.com/vodori/missing#2018-09-1120:09blueberryhttps://dragan.rocks/articles/18/SmallFP-presentation-Interactive-Functional-GPU-Accellerated-Programming-Clojure#2018-09-1303:23richiardiandreaClojureScript utility for Terraform released today: https://twitter.com/richiardiandrea/status/1040064598685102080?s=20#2018-09-1306:44nilrecurringAnnouncing [dhall-clj/dhall-clj "0.1.0"], a compiler from Dhall to Clojure: https://twitter.com/fabferrai/status/1040126114599981056
Dhall is a non-Turing complete, typed functional programming language. Some usecases: modular and typechecked configurations, typed data language for the wire (has an efficient binary representation), CI orchestration#2018-09-1306:45nilrecurringMore about Dhall in the language standard repo: https://github.com/dhall-lang/dhall-lang#2018-09-1311:00mpenetCongrats! And the first cc.qbits/ex user I see in the wild. Thanks for the mention btw 😉#2018-09-1312:23nilrecurringThanks a lot for making a great library :)#2018-09-1307:31seancorfieldclj -Sdeps '{:deps {org.clojure/tools.cli {:mvn/version "0.4.0"}}}' -- Tools for working with command line arguments. https://github.com/clojure/tools.cli#change-log Converted to .cljc to provide complete parity between Clojure and ClojureScript versions; added deps.edn for use with clj; drops support for Clojure 1.7 and earlier. Follow-up to #clojure#2018-09-1307:35seancorfield{seancorfield/clj-new {:git/url "" :sha "21ca1b27f46dc324be084ba839beca555aeda387"}} -- generate new projects with clj! https://github.com/seancorfield/clj-new Now supports various command-line arguments to control project creation / code generation. Follow-up to #tools-deps#2018-09-1313:01rutledgepaulvAnnouncing [com.vodori/chronology "0.1.0"]. Chronology is a small library for working with cron expressions and scheduling tasks. It provides infinite sequences of cron expressions (both forwards and backwards!) and provides a small layer to schedule functions as periodic tasks using core.async machinery.
https://github.com/vodori/chronology#2018-09-1416:55hlshipcom.walmartlabs/lacinia 0.29.0 and lacinia-pedestal 0.10.0
Lacinia is an open-source implementation of Facebook's GraphQL specification, in Clojure.
GraphQL is an outstanding approach to getting diverse clients and servers exchanging data cleanly and efficiently.
GitHub repo: https://github.com/walmartlabs/lacinia
Documentation: https://lacinia.readthedocs.io/en/latest/
Featured changes in 0.29.0:
- Updates to support June 2018 revision of the GraphQL spec
- Improved support for injecting documentation and other values into a schema
- Support for block strings in query and schema documents
- Support for strings/blockstrings as schema element descriptions
- Fix compatibility with Clojure 1.8
lacinia-pedestal provides the Pedestal support to expose web endpoints backed by Lacinia's GraphQL.
GitHub repo: https://github.com/walmartlabs/lacinia-pedestal
Documentation: https://lacinia-pedestal.readthedocs.io/en/latest/
Featured changes in 0.10.0:
- Compatibility with lacinia 0.29.0
- Added a spec for the service-map function
- Split up the default interceptor chain somewhat, to support server-side queries in the future#2018-09-1712:51damianHi! Here in Magnet we’ve played a bit with Conformity - a migration library by @avey_q. However we’ve had some issues with transactions getting reapplied unexpectedly so we’ve developed a simplified, atomic version of it.
We haven’t explored Ragtime by @weavejester yet, but in case it’s useful for some of you, there it is lying.
https://github.com/magnetcoop/stork#2018-09-1713:56rborerHi there, in case you wonder which Java JDK you'll need to use when Java 11 will be out, the folks at jClarity ERRATA: the java champions did an awesome summary on all the available options (both free & paid) within this document cleverly named "Java is still free": https://docs.google.com/document/d/1nFGazvrCvHMZJgFstlbzoHjpAVwv5DEdnaBr_5pKuHo/edit?usp=sharing 🙂#2018-09-1715:02practicalli-johnThere is also a *Java is still available at zero-cost* blog post that summarizes the jClarity info https://blog.joda.org/2018/08/java-is-still-available-at-zero-cost.html?__s=bcofydr54pntadt2aeze#2018-09-1723:50gigasquidApache MXNet 1.3.0 is out along with the Clojure bindings! https://medium.com/apache-mxnet/announcing-apache-mxnet-1-3-484ea78c22ad - The jars are out on maven central https://search.maven.org/search?q=g:org.apache.mxnet.contrib.clojure. If you are interested or need help. Head on over to the #mxnet room#2018-09-1801:43Eric Scott👍 #2018-09-1817:17pesterhazyNew version of cljs-spa-example, featuring simplified global exports configuration and automatic headless testing
cljs-spa-example is a small demo application demonstrating (what I think are) best practices when building Single Page Applications today. It's based on the new Figwheel Main 0.1.9 release. Check the README for the explanation of some of the choices and ideas behind the project.
https://github.com/pesterhazy/cljs-spa-example#2018-09-2311:02plexusKaocha 0.0-173 is out, with improved autorunner and REPL API https://clojureverse.org/t/announcing-kaocha-a-new-and-improved-clojure-test-runner/2903#2018-09-2318:01andy.fingerhutThere is now a published transcript for Rich Hickey's talk on Datomic Ions that he presented at clojure/nyc on Sep 12, 2018. If you have a better source for images of some of the slides, or know what he was saying in a few parts I couldn't understand marked "tbd", please open an issue or PR to improve it: https://github.com/matthiasn/talk-transcripts/blob/master/Hickey_Rich/DatomicIons.md#2018-09-2318:24seancorfield[org.clojure/tools.cli "0.4.1"] Tools for working with command line arguments (Clojure & ClojureScript) -- https://github.com/clojure/tools.cli#change-log -- adds :update-fn and :default-fn for better control over repeated arguments and default values. Follow-up to #clojure (or via DM).#2018-09-2407:15roklenarcicI've made a small library for fashioning REST requests. *Feedback welcome* https://github.com/RokLenarcic/clj-rest-client#2018-09-2605:19miikka[metosin/scjsv "0.5.0"] is out. scjsv is a Clojure library for JSON Schema validation. Changelog here: https://github.com/metosin/scjsv/blob/master/CHANGELOG.md#2018-09-2608:39reborgLondon crowd, tomorrow night, nice speakers lineup haskell/clojure/functional at https://www.meetup.com/London-Functionals/events/254679448/#2018-09-2821:01hlshipio.aviso/pretty 0.1.35
https://github.com/AvisoNovate/pretty
> Sometimes, neatness counts
io.aviso/pretty is a library and Leiningen plugin that adds well formatted, readable output of Clojure exceptions.
It's pretty indispensable to the tune of 1.5 million downloads, and is integrated into the Ultra plugin as well as Boot.
This release honors the sorting order of sorted maps and adds an optional namespace, used with Stuart Sierra's component library, that removes the excessive output that pretty printing a system map can cause.#2018-09-2822:17tony.kayFulcro now has really nice GraphQL integration via Pathom. New video overview here: https://youtu.be/Yk7xFry0w2Y#2018-09-3019:19wilkerlucioPathom updated docs (thanks to @tony.kay) are live, many sections got a lot of improvement! A highlight to the new GraphQL integration docs: https://wilkerlucio.github.io/pathom/DevelopersGuide.html#GraphQL#2018-09-3022:47danielcomptonClojurists Together has finished our latest survey and have a list of focus areas for our next funding round: https://www.clojuriststogether.org/news/q4-2018-survey-results. Encourage the projects that you depend on to apply for funding.
If you have any questions about applying, please get in touch here or via any of the other places you can find me 🙂. Applications close 9th October#2018-10-0120:05beta1036I've seen this in the code, and wanted to know the reasons for it being this way. I was surprised that keywords can take sets, and even more surprised that they can only take IPersistentSet or ITransientSet whereas java.util.Map is supported.#2018-10-0120:06beta1036Is there an idiomatic use for applying a keyword to a set?#2018-10-0120:19seancorfield@U4844LY6A (Clojure) sets are associative on their keys -- like a map whose values are the same as their keys -- so you can call "get" on them. Java sets don't have that associative lookup -- only a "contains" operation. That would be my understanding of why you can lookup keywords in (Clojure) sets but not Java sets.#2018-10-0120:22seancorfield(and arrays are associative on their indices -- so, again, it makes sense to allow lookup "get" on those)#2018-10-0120:23seancorfieldDoes that make sense?#2018-10-0120:26beta1036Having get on maps, sets and arrays makes sense to me.#2018-10-0120:27beta1036It would make more sense to me if keyword application either supported java sets or not supported any sets at all. And of course supporting keyword application on vectors makes no sense at all.#2018-10-0120:28beta1036The fact that java sets don't have a get operation seems like a weak excuse for not supporting them.#2018-10-0120:29beta1036But I'm not complaining, since I don't have any use for applying keywords to sets at the moment. 🙂#2018-10-0121:04seancorfieldClojure is based on abstractions. map, set, and vector are associative in Clojure, hence should all support get. Java's Map is associative, Java's Set is not.#2018-10-0121:06seancorfieldRe: keyword on vector -- vectors are associative on their index so, no, Clojure does not support keyword lookup on them. (kw coll) is "the same" as (coll kw) which is "the same" as (get coll kw) and for vectors (coll ix) is the shorthand.#2018-10-0118:27wilkerlucio[spec-coerce "1.0.0-alpha7"] is out https://github.com/wilkerlucio/spec-coerce
This update makes the date parsing more permissive on the Clojure side (thanks @seancorfield!), also adds the new functions sc/conform (coerce and then conform) and sc/coerce! (trigger exception if coercion doesn't work).#2018-10-0119:40hlshipcom.walmartlabs/lacinia 0.30.0
Lacinia is an open-source implementation of Facebook's GraphQL specification, in Clojure.
GraphQL is an outstanding approach to getting diverse clients and servers exchanging data cleanly and efficiently.
GitHub repo: https://github.com/walmartlabs/lacinia
Documentation: https://lacinia.readthedocs.io/en/latest/
Featured changes in 0.30.0:
- Can now wrap individual items in a list, not just the entire list
- Fix bug with attach-resolvers, if a resolve function is already attached#2018-10-0122:07seancorfield{honeysql {:mvn/version "0.9.4"}} or [honeysql "0.9.4"] https://github.com/jkk/honeysql -- SQL as Clojure data structures. Build queries programmatically -- even at runtime -- without having to bash strings together. -- bug fix release! Follow-up in #honeysql#2018-10-0215:10devthhttps://github.com/yetibot/yetibot Yetibot is a Clojure chatbot that supports fun bash-like expressions including pipes, aliases, sub-expressions and a whole lot more. If you're interested in participating in Hacktoberfest here are some good first-time contributor issues https://github.com/yetibot/yetibot/labels/Hacktoberfest#2018-10-0216:36eval2020eval/otarta "0.3.0"
Otarta - an MQTT-library for ClojureScript.
Give the first public release a try!
Supports:
- easy configuration via a broker-url
- publish/subscribe using core-async channels (QoS 0)
- payload formatting (edn, json, transit, your own)
- example CI-dashboard added (see README.md)
https://gitlab.com/eval/otarta/tree/master#otarta#2018-10-0316:42hlshipcom.walmartlabs/cond-let 1.0.0
A micro library of a single macro, cond-let.
cond-let acts like a cond, but adds :let terms that are followed by a binding form (like let).
This allows conditional code to introduce new local symbols; the result is clearer, more linear code, that doesn't make a march for the right margin.
Example:
(defn ^:private has-necessary-capabilities?
"Does the worker have all the capabilities that the job needs?"
[state worker-id task]
(cond-let
:let [job-id (:job-id task)]
(nil? job-id)
true
:let [capabilities (get-in state [:jobs job-id :clockwork/required-capabilities])]
(empty? capabilities)
true
:let [worker-capabilities (get-in state [:workers worker-id :capabilities])]
(empty? worker-capabilities)
false
:else
;; It's ok for the worker to have *more* capabilities than are specified.
;; For each required capability, we need an exact match.
(= (select-keys worker-capabilities (keys capabilities))
capabilities)))
https://github.com/walmartlabs/cond-let#2018-10-0317:13schmeehow is this different from https://github.com/Engelberg/better-cond?#2018-10-0320:32hlshipIt isn't. Wasn't aware of the other.#2018-10-0413:27danielneal❤️ better cond, and this idea. I like how it stops the rightward drift. I do keep trying to sneak it into projects but usually get shut down because it's an additional dependency#2018-10-0416:26vemvSimilarly I have https://github.com/vemv/with in the oven, it has two advantages:
- decomplected from cond, I'm not interested in a turbocharged cond
- accepts arbitrary symbols/keywords instead of whitelisting a few acceptable forms (namely let, when, when-let)
I want to make a breaking API change before a release/announcement but if the idea excites you, hit me up 🙂#2018-10-0511:15danielnealooh interesting#2018-10-0418:53Bobbi TowersNew episode of Apropos starting soon, get your Clojure news, REPL demos and live chat https://www.youtube.com/watch?v=knX0QMnfwqE#2018-10-0418:56mauricio.szaboI don't know if this is the correct channel, but I'm writing a plug-in for Atom to connect with SocketREPL (Clojure and ClojureScript).
I just documented my experience in working with ClojureScript for plug-ins here: https://mauricio.szabo.link/blog/2018/10/02/atom-packages-with-clojurescript-upgraded/ 😄#2018-10-0502:32Alex Miller (Clojure team)Clojure 1.10.0-alpha9 is now available https://groups.google.com/forum/#!msg/clojure/ErhMQYuquq4/XMs34sVlAgAJ#2018-10-0512:53martinklepschClojuristsTogether deadline for the next funding round is next Tuesday Oct 9th.
If you maintain Clojure OSS, consider applying: https://www.clojuriststogether.org/open-source/ 🎉#2018-10-0521:56carocadhey guys, I have been using this for a while in a project of mine and decided to make it a library.
https://github.com/hiposfer/rata#2018-10-0604:16Alex Miller (Clojure team)Clojure 1.10.0-beta1 is now available https://groups.google.com/d/msg/clojure/6hJM5q_CC_M/FzolPjm6AgAJ#2018-10-0604:22Alex Miller (Clojure team)Changelog has been updated with all changes since 1.9: https://github.com/clojure/clojure/blob/master/changes.md#2018-10-0921:21Alex Miller (Clojure team)Clojure 1.10.0-beta2 is now available https://groups.google.com/d/msg/clojure/NLTR_FoA9ZA/iy95Kn37AQAJ#2018-10-0922:21rutledgepaulvCurious about the motivations behind datafy. Is it as plain as establishing a core protocol for exposing opaque things as something easy to work with?#2018-10-1013:33eggsyntax@U5RCSJ6BB happened to see a bit of discussion about it on twitter this morning:
https://twitter.com/mfikes/status/1049412122810220544#2018-10-1014:02Alex Miller (Clojure team)some more blathering if that helps https://www.reddit.com/r/Clojure/comments/9mt700/ann_clojure_1100beta2_is_now_available/e7hkzji/#2018-10-1009:49yogidevbearMorning everyone 🙂
I recently interviewed @seancorfield for the JUXT Clojure In series. Please can you share the love if you're able to ❤️ https://twitter.com/juxtpro/status/1049957394489462784?s=19#2018-10-1010:37yogidevbearP.S. Thank you Sean again for taking time out to make this article a reality 🙂 It was great fun to write up!#2018-10-1115:17Alex Miller (Clojure team)Clojure 1.10.0-RC1 is now available (same code as beta2). PLEASE TEST and provide feedback - this is a release candidate.#2018-10-1317:36mauricio.szaboJust published my SocketREPL package for Atom editor: https://atom.io/packages/chlorine
It's still alpha quality, but so far, I'm able to connect to Clojure, evaluate code, upgrade Clojure REPL to ClojureScript (shadow-cljs only, no figwheel yet), and autocomplete. Also, this package is a playground to replicate these changes in another editors like NeoVIM and possibly VS Code#2018-10-1407:44olieidelPublished h2-jdbc which extends JDBC protocols for the H2 Database to return Java 8 objects. Similar to clj-time.jdbc, only specific for H2 and java.time.
This is the result of a discussion in #clojure in which I stumbled over the whole TIMESTAMP WITH TIME ZONE data type in H2 returning an org.h2.api.TimestampWithTimeZone object. I went through all other H2 data types and coerced them to java.time objects 🙂
@seancorfield suggested I’d publish this as a library (so here it is!) and helped out with a few questions (thanks!)
You probably already have a half-baked implementation of this in your codebase if you’re using H2 and java.time objects in Java 8.
Check it out: https://github.com/olieidel/h2-jdbc#2018-10-1511:45belucidJust launched our full-stack Clojure OSS & SaaS product! https://carrot.io/ It's a leadership communication platform for better transparency and alignment. Especially great for growing and remote teams. ClojureScript/React/Rum front-end and Clojure microservices in back. All the code repos are here: https://github.com/open-company#2018-10-1512:03martinklepschGood luck with the launch Sean!#2018-10-1512:16belucidThanks so much Martin! Really appreciate it. Congrats on all the high profile Clojure work you're doing. I can't go anywhere in the community w/o your contributions, and speaking videos popping up. It's awesome.#2018-10-1514:18ccannthis looks super useful!#2018-10-1515:34belucidThanks @U0BAS2E13 I hope it is. Ping me any time here if you have any questions about it or feedback. Would love to chat with you about what problems you have in this area. Martin K. worked with us on it for a few months too.#2018-10-1518:04zaneOh, I saw this on Product Hunt. Didn't realize it was built using Clojure. Nice work.#2018-10-1611:29belucidThanks @U050CT4HR! It's not why we do it, but it nice that Carrot shows that full-stack Clojure can really work well for a startup. And the code is available to anyone to see how it was done.#2018-10-1714:07vemvHow come all/most code is open source?
Wouldn't you be afraid of e.g. an enterprise client deciding to host its own instance?#2018-10-1511:46belucidPing me if anyone has any questions about it! We're also on ProductHunt today and I appreciate any upvotes from fellow Clojure devs.#2018-10-1516:41andy.fingerhutA transcript of Alex Miller's talk "Dependency Heaven", about tools.deps motivation and design choices, is available here: https://github.com/matthiasn/talk-transcripts/blob/master/Miller_Alex/DependencyHeaven.md#2018-10-1519:15Alex Miller (Clojure team)Thanks! While a lot of the conceptual stuff is good, this was about 4 months before the official release and some of the deps.edn details changed afterwards. So - watch out!#2018-10-1519:29devthYetibot 0.4.50 is out! https://yetibot.com/
- new pirate feature to translate text to pirate speak by @jereme
- upgraded yetibot-dashboard dep with improved History view (see https://public.yetibot.com for a publicly-available example)#2018-10-1519:30devthhere's a fun usage example of pirate:
!twitter show boredelonmusk | random | pirate | meme elon:
#2018-10-1519:30devthYetibot output#2018-10-1615:12wilkerlucio[nubank/workspaces "1.0.0-preview9"] is out, this release makes workspaces tolerant to errors in cards, now when some error happens it's contained at the card level and workspaces keeps running#2018-10-1701:25souenzzoA small lib that generates a query from a pattern
https://github.com/souenzzo/eav-pull#2018-10-1705:58fmjreyThanks! What's the main intent, is it to simplify querying, or to help with dynamic queries, e.g. resolving graphql queries?#2018-10-1712:44souenzzoIn my "framework" after pull data from db, i turn all maps into E A V then put it in a #clara engine that generate new facts, then build again in into maps
So this simplify my work.
I think that it can evolve to talk with client side db like #datascript or #fulcro#2018-10-1712:28practicalli-johnClojure beats Kotlin, Groovy, Scala in this survey for principal JVM language https://snyk.io/blog/jvm-ecosystem-report-2018#2018-10-1713:03cvic😉
https://clojurians.slack.com/archives/C03S1KBA2/p1539777166000100#2018-10-1713:13eggsyntax"8 in 10 use Java 8 in production" is higher than I'd expected.#2018-10-1713:21miro@U077BEWNQ also higher than I expected but for me it is reassuring that I am not the only one who sticks with 8... somehow 9&10 did not bring enough to make me upgrade yet. Modules in 9 were major disappointment for me. In 10 I like graal but imho it will need some time to mature.#2018-10-1713:22eggsyntaxYeah, post-8 releases have been a bit underwhelming.#2018-10-1714:20orestisFor anyone wondering, ~10000 participants. So 3% = 300 Clojure users filled this in.#2018-10-1714:17martinklepschFor anyone who still wants to use clj-http-lite I put up a fork and did some housekeeping (CI setup, Java 10 compatibility): https://github.com/martinklepsch/clj-http-lite — available as
[org.martinklepsch/clj-http-lite "0.4.1"]
#2018-10-1714:35taylorthanks for this! I used the original for a GraalVM native image recently — I'll try it again with this version#2018-10-1715:49souenzzoI love this "zero" deps rewrites 🙂#2018-10-1722:04tony.kayFulcro Developer’s Guide has a new security chapter describing steps for securing both normal and websocket-based networking.
http://book.fulcrologic.com/#Security#2018-10-1811:24delaguardoI made a PR for cheshire library to add ability to skip parts of a json by using path-predicate option. It also add parsed-seq-strict public function to retrieve arrays from the huge json lazily. For anyone who want to test it - it is available as [org.clojars.dlg/cheshire "5.8.2-SNAPSHOT"]
https://github.com/dakrone/cheshire/pull/135 - there is a PR
;; tl;dr
(parse-string "{\"foo\": {\"bar\": 2, \"buz\": 4}, \"oof\": 3}" true nil (fn [path] (re-matches #"(foo|oof)(bar)?" (apply str path))))
;; => {:foo {:bar 2} :oof 3}
#2018-10-1813:36blueberryhttps://dragan.rocks/articles/18/Patreon-Announcement-Adopt-a-Function#2018-10-1813:57polymerisLike amazonica but for ClojureScript (and a bit less ambitious): https://github.com/polymeris/cljs-aws
Early development, feedback very welcome.#2018-10-1822:39patFressian for clojurescript & WebAssembly https://github.com/pkpkpk/fress#2018-10-1920:44danielcomptonClojurists Together is funding @tonsky for Datascript and @plexus for Kaocha this quarter: https://www.clojuriststogether.org/news/q4-2018-funding-announcement/#2018-10-2015:24renewdoit
Releasing fun-map 0.3, with concurrent accessing support (with manifold), spec instrument (with clojure >= 1.9 ) and more flexible syntax for fw macro.#2018-10-2015:25renewdoithttps://github.com/robertluo/fun-map#2018-10-2120:47ikitommi[metosin/spec-tools "0.8.0"] is out! New spec walker, enhanced spec parser, new coercion utility and swagger improvements. The key feature is new st/coerce (inspired by spec-coerce), which uses spec transformers and the spec walker to best-effort coerce values to conform to (a set of simple) specs without a need to wrap the specs. st/decode uses now both coercion and conforming behind the hoods to supports all specs. Looking forward to CLJ-2251 for making things clean.
https://github.com/metosin/spec-tools#2018-10-2121:46vemvOut of curiosity, when will compojure-api use this new version?#2018-10-2206:10ikitommi@U45T93RA6 hopefully later today#2018-10-2217:51dcjthank you for st/coerce, presumably I can now switch from spec-coerce!#2018-10-2220:16ikitommi@U45T93RA6 updated: [metosin/compojure-api "2.0.0-alpha27"]#2018-10-2120:47ikitommi[metosin/reitit "0.2.4"] is out too! Reitit is a fast data-driven router for Clojure(Script) supporting browser apps, ring, pedestal, pluggable async, schema, specs, swagger & interceptors. The new version uses the latest spec-tools to bring more robust spec coercion for all routing apps. Example app: https://github.com/metosin/reitit/tree/master/examples/http-swagger
https://github.com/metosin/reitit#2018-10-2220:09blueberryhttps://dragan.rocks/articles/18/Ditching-Slack-Opening-Place-Personal-Interaction#2018-10-2220:20blueberryOr: Why I'm ditching Slack Clojurians and opening a new place for more personalized interaction for Uncomplicate and other Clojure topics#2018-10-2220:26martinklepsch@U086AG324 do you know about @logbog and https://clojurians-log.clojureverse.org?#2018-10-2220:27blueberryyes, and I addressed in the text that it is only a smaller part of my being fed up with Slack.#2018-10-2220:30martinklepschOk just wanted to make sure 🙂 Good luck with Discord 🙂#2018-10-2221:11seancorfieldAny and all follow-up should go to #community-development -- thank you!#2018-10-2312:21cvicI remember there's also a Mattermost instance#2018-10-2412:57blueberryhttps://dragan.rocks/articles/18/Clojure-and-OpenCL-in-Action-GPU-Computing-Book-1#2018-10-2508:47val_waeselynckReleasing d2q, a simple, efficient, generally applicable engine for implementing graph-pulling API servers in Clojure. Feedback wanted! https://groups.google.com/forum/#!topic/clojure/ENWeSJeAJOA.#2018-10-2513:56fmnoiseMeet flow - declarative errors handling without monads
https://github.com/dawcs/flow#2018-10-2514:16lukas.rychteckyI did similar thing with monads 😄 https://github.com/druids/rop#2018-10-2518:33caioreleasing tank, a simple library for some common fault tolerance patterns (very early release, feedback is more than welcome!): https://github.com/caioaao/tank#2018-10-2715:43blueberryhttps://dragan.rocks/articles/18/Programmers-Teach-Yourself-Foundations-of-ML-AI-With-These-X-Books#2018-10-3003:38souenzzoUse io.pedestal.test/response-for as a com.wsscode.pathom.diplomat.http/driver
#pathom
https://github.com/souenzzo/pathom-pedestal-driver#2018-10-3015:01plexusNew free Lambda Island episode! https://lambdaisland.com/episodes/a-la-carte-polymorphism-1 (this one covers pretty basic stuff, part 2 will get into the more advanced stuff)#2018-10-3015:35Shantanu KumarI just released Promenade 0.7.0 (elegant error handling and control flow) to Clojars, with support for early termination and more: https://github.com/kumarshantanu/promenade#2018-10-3017:39plexusAnnouncing lambdaisland/deep-diff, a mini-lib for diffing data structures and printing the result#2018-10-3017:39plexushttps://github.com/lambdaisland/deep-diff#2018-10-3017:40plexus#2018-10-3019:38schmeenice, this could not have been announced at a more opportune time for me, was just looking around for a diffing library! 😄#2018-10-3019:39schmeesmall feature suggestion: it would be nice to have a way to only print the diffs, and skip all the parts that match 🙂#2018-10-3019:41schmeeman this is great, thanks so much for this! :sports_medal:#2018-10-3019:59plexus@U3L6TFEJF you could take the output of diff and filter it before passing it to pretty-print#2018-10-3020:01schmeeyeah, I can work some Specter magic for that, but still would be nice as a built-in IMO, makes the differences more immediate when diffing large data structures#2018-10-3020:43tristefigureMade a (dirty) fork of humane-test-output to use deep-diff instead of clojure.data/diff.
To install locally (via lein localrepo):
### In the terminal
cd /tmp
git clone
#2018-10-3020:49tristefigurePR: https://github.com/pjstadig/humane-test-output/pull/34#2018-10-3101:15Vincent Cantin@U07FP7QJ0 I heard about this diff project (https://github.com/juji-io/editscript) that is more recent than the one you use (https://github.com/droitfintech/clj-diff), maybe worth giving it a try.#2018-10-3021:06vigilancetechbasic "hello world" example for shadow + hoplon + electron (w/reload) (w/rock solid cider nrepl connection): https://github.com/vigilancetech-com/shadow-hoplon-electron#2018-10-3115:09blueberryhttps://dragan.rocks/articles/18/Easy-Probability-Clojure-1-The-South-Park-Socks-Drawer#2018-11-0120:24deliciousowlAre the answers programmatically generated in the web page itself? Saw a few errors earlier for a second or two 🙂#2018-11-0116:51practicalli-johnA beginners study group is starting 3rd November via the MeetAMentor community, following this basic study plan https://practicalli.github.io/clojure/study-guide.html
Its free to join and all content will be shared publically.
Sign up to the MeetAMenter study groups via http://bcrw.typeform.com/to/VkChxI
The first hangout for the study group will be 11am-12noon (UTC, GMT timezone) on Saturday 3rd November
https://youtu.be/MZcuL4lRw5E#2018-11-0201:42nathanmarzSpecter 1.1.2 released https://github.com/nathanmarz/specter/blob/master/CHANGES.md#2018-11-0216:57plexushttps://lambdaisland.com/blog/2018-11-02-test-wars-new-hope#2018-11-0420:13blueberryhttps://dragan.rocks/articles/18/Code-Mesh-LDN-Presentation-Interactive-GPU-Programming#2018-11-0500:58razum2umJust realised, that we need to push people towards better ideas, so added a new section to awesome-clojure list named awesome datastructures and put it before web-frameworks 😉 please PR more, if I didn’t mention: https://github.com/razum2um/awesome-clojure/blob/master/README.md#advanced-datastructures#2018-11-0514:51plexusnice! I didn't know about awesome-clojure, very nice collection you got there. I was clicking around a bit and it seems the link to 'lucid.unit' is broken#2018-11-0502:05mikethompsonThere's a new re-com release.
https://github.com/Day8/re-com/releases/tag/2.2.0#2018-11-0506:10tony.kayFulcro incubator 0.0.12 is on clojars, and it just launched state machine support! This is a seriously good addition to Fulcro, and you should check it out. https://github.com/fulcrologic/fulcro-incubator/blob/master/state-machine-docs.adoc#2018-11-0516:37johnBrilliant!#2018-11-0517:20schmeeAnnouncing https://github.com/schmee/java-http-clj, a lightweight Clojure wrapper for java.net.http with HTTP/2, async requests and an idiomatic API#2018-11-0518:15rymndhnghttps://rymndhng.github.io/2018/11/05/effective-repl-driven-clojure/
I wrote something up about REPL-driven development, inspired by stu's talk: https://www.youtube.com/watch?v=Qx0-pViyIDU#2018-11-0613:58Alex Miller (Clojure team)Clojure 1.10.0-beta5 is now available https://groups.google.com/d/msg/clojure/pKYOHu99Rmg/JO5r-zooAgAJ#2018-11-0623:18danielcomptonClojurists Together is holding elections for committee members this month. Please consider standing, or encouraging someone else to stand for election: https://www.clojuriststogether.org/news/2018-committee-nominations/#2018-11-0808:30olieidelI just released hcloud, an API client for the Hetzner Cloud API.
Quick context, what is Hetzner? It’s basically DigitalOcean but cheaper and a German company. I’m not sponsored by them but have hosted all my past projects there and was quite happy - and guess what, there wasn’t a Clojure client for their API yet.
Side note: I also did some toying around with metadata to auto-generate docs which are included in the README.md. Probably not that impressive but I thought it was quite neat. Check out dev/readme.clj for the code.
https://github.com/olieidel/hcloud#2018-11-0811:39jerger_at_ddayour lib is comparable to hetzners terraform provider?#2018-11-0811:41roklenarcicYou can replace :headers {"Authorization" (str "Bearer " token)} in http-opts with :oauth-token token.#2018-11-0812:53olieidel@jerger_at_dda yeah I suppose it’s comparable, only completely in Clojure. so if you want to “roll your own” creation / management of hetzner servers in Clojure, this is for you 😄#2018-11-0812:55olieidel@U66G3SGP5 wow, that’s a great find, I didn’t know that was equivalent. thanks for looking through the code btw! will change. relevant source of clj-http for those interested: https://github.com/dakrone/clj-http/blob/eee52198d7776e3e6d965fbade9296918efc8cca/src/clj_http/client.clj#L846#2018-11-0812:57roklenarcicHehe I spent a lot of time looking that source, since I've been making a lot of clients and my own rest client library#2018-11-0813:00olieidelhehe, I have a feeling that your clients are more well-designed than mine - I don’t have much experience writing them in Clojure#2018-11-0819:20roklenarcicNot really, your client looks fine and clean. Not to toot my own horn, but here's my lib for generating request maps: https://github.com/RokLenarcic/clj-rest-client#2018-11-0819:21roklenarcicI am happy to get any feedback#2018-11-0812:53olieidel@jerger_at_dda yeah I suppose it’s comparable, only completely in Clojure. so if you want to “roll your own” creation / management of hetzner servers in Clojure, this is for you 😄#2018-11-1017:09tony.kayFulcro Incubator 0.0.15 is on clojars. This release includes a much more feature-complete state machine system for Fulcro UIs including better abstraction support for loads, mutations, timeouts, network abort, and an alternate notation notation that allows for easy conversion to diagrams. https://github.com/fulcrologic/fulcro-incubator.#2018-11-1208:26val_waeselynckNew article: https://vvvvalvalval.github.io/posts/2018-11-12-datomic-event-sourcing-without-the-hassle.html, featuring:
• an analysis of the limitations of conventional Event Sourcing implementations
• how Datomic addresses them
Feedback welcome as always!
Follow up in #datomic please.#2018-11-1211:33mirohi guys, I have just released titanoboa - https://github.com/mikub/titanoboa
It is a workflow orchestration platform for JVM entirely written in clojure. It also comes with a reagent GUI (which I have not OSSed yet).
Best place to start would be probably to look at its wiki - https://github.com/mikub/titanoboa/wiki/Getting-Started-with-GUI#2018-11-1300:00tony.kaySmall bump to Fulcro Incubator: 0.0.16. Fixed accidental inclusion of sources twice, which was causing misbehavior with REPLs and IDEs.#2018-11-1411:16eval2020Introducing Clojurians-Zulipchat
Details and rationale: https://clojureverse.org/t/introducing-clojurians-zulip/3173
Join us at http://clojurians.zulipchat.com/ !#2018-11-1415:00blueberryhttps://dragan.rocks/articles/18/Neanderthal-vs-ND4J-vol5#2018-11-1508:42plexusIntroducing kaocha-cucumber, test your Clojure code with Cucumber https://github.com/lambdaisland/kaocha-cucumber 🥒#2018-11-1508:43danielcomptonClojurists Together candidates for elections have been announced: https://www.clojuriststogether.org/news/2018-committee-candidate-announcement/. If you're a Clojurists Together member, watch your email for your ballot.#2018-11-1513:26amarjeet@U051KLSJF The post says “Each company and developer member gets one vote.” - Does it mean individual contributing members are not eligible?#2018-11-1517:14danielcomptonSorry, it just means everyone gets a vote#2018-11-1517:14danielcomptonI’ll clarify that#2018-11-1517:16amarjeetokay, great. thanks 🙂#2018-11-1511:30lispycloudsReleased clj-docker-client an idiomatic docker client for Clojure: https://github.com/lispyclouds/clj-docker-client
This is a work in progress and is was started primarily to help me out in my various projects. Its far from complete but aims to be fully compliant with Docker. Please raise any issues for feature requests and feedback is most welcome. Hope this is useful to the community. 😄#2018-11-1511:39alanThis is really cool! I was thinking how to add a helper module to my clj-boost library for making deployment of models easier and this looks like the way to go!#2018-11-1511:42lispycloudsReally glad this is useful. Do let me know for any feature requests 😀#2018-11-1512:28nhaI like the idea - I was shelling stuff to the docker cli before to do that.
maybe these guys would be interested too https://github.com/Quantisan/docker-clojure/pull/56#2018-11-1513:07lispycloudsAwesome! ive dropped a message there.#2018-11-1602:18rutledgepaulvVodori released [com.vodori/reactors "0.1.0"]. It’s our take on a reactive store (events/reducers/subscribers) atop clojure agents with event producers and subscribers expressed as core.async channels. We use it with database change streams as our producers and websockets as our subscribers to provide live collaboration between users annotating files. https://github.com/vodori/reactors#2018-11-1615:02martinklepschcljdoc cljdoc, the website for Clojure and ClojureScript library documentation is now working great on mobile! 📱
- 🎥 There's a video demo here: https://giant.gfycat.com/CostlyLittleAracari.mp4
- 🐦 And a tweet to share if you want to help spread the word: https://twitter.com/martinklepsch/status/1063443343089242112
- 📄 Also, if you're a library author, give cljdoc a try: https://github.com/cljdoc/cljdoc/blob/master/doc/userguide/for-library-authors.adoc
And join us in #cljdoc 👋#2018-11-1615:17Vincent CantinMaybe unrelated: I tried to browse this page and found out that I cannot scroll down the page. Do other people encounter the same issue? https://cljdoc.org/d/integrant/integrant/0.8.0-alpha2/doc/readme#2018-11-1615:17martinklepsch@U8MJBRSR5 on mobile?#2018-11-1615:18Vincent CantinFirefox, MacOSX#2018-11-1615:20martinklepschdamn, can reproduce#2018-11-1615:20martinklepschThanks!#2018-11-1615:51martinklepsch@U8MJBRSR5 should be fixed now#2018-11-1615:52Vincent CantinI confirm that it works now.#2018-11-1615:52martinklepschGreat brushes sweat of forehead#2018-11-1620:07Alex Miller (Clojure team)Clojure 1.10.0-beta6 is now available https://groups.google.com/d/msg/clojure/oruh1-G7ujc/gSy9uKqGAAAJ#2018-11-1921:49Alex Miller (Clojure team)Clojure 1.10.0-beta7 is now available https://groups.google.com/forum/#!topic/clojure/2KrPBXYlzeA#2018-11-1921:50Alex Miller (Clojure team)We expect to proceed soon to release candidates again, so testing welcome!#2018-11-2022:10aviMy test suite ran normally, no issues. (Uses spec and test.check among other things.)#2018-11-2022:34Alex Miller (Clojure team)thx!#2018-11-2022:34avimy pleasure!#2018-11-2000:06curlyfryI just released https://clj-templates.com/, a webapp for easily finding Clojure templates for Leiningen and Boot#2018-11-2008:12miikkaDoo 0.1.11 is now available. It comes with preliminary Lumo and Planck support and some small improvements. https://github.com/bensu/doo/blob/master/CHANGELOG.md#0111---2018-11-20#2018-11-2115:28Alex Miller (Clojure team)Clojure 1.10.0-beta8 is now available https://groups.google.com/d/msg/clojure/2GQQpxNcDlM/9o_dpUaqAgAJ#2018-11-2115:51blueberryhttps://dragan.rocks/articles/18/CUDA-10-in-Clojure#2018-11-2219:47schmeejava-http-clj 0.4.0 has been released! contains a brand new WebSocket API and much improved documentation: https://github.com/schmee/java-http-clj#2018-11-2221:09nwjsmithThis library looks great, keep at it!#2018-11-2411:15vijaykiran4th Edition of FREE Dutch Clojure Day will happen on April 6th 2019, in Amsterdam - Checkout our website http://clojuredays.org
Our CFP is now OPEN - https://www.papercall.io/dcd19
And we are looking for sponsors - if you are interested in supporting a community-driven non-profit conference, please get in touch 🙂#2018-11-2419:49wilkerlucioI'm please to announce [com.wsscode/pathom "2.2.0"] is out! Here are the highlights of this version: https://github.com/wilkerlucio/pathom
* A guide to leverage the new features is provided at the book (no breaking changes from 2.1.0, you can update the library and upgrade the details when it's convient for you): https://wilkerlucio.github.io/pathom/#_2_2_0_upgrade_guide
* Parallel parser with automatic coordination using connect, I updated the docs prividing information about how it works, you can find at: https://wilkerlucio.github.io/pathom/#_code_pc_parallel_reader_code
* Tracer feature that will replace the old profiler, the profiler before could only measure the times of reads, the tracer is more dynamic, event based tracing for the parser, it can annotate any sug-segments
* New format to define resolvers/mutations that are pure data (just maps), this new method facilitates the use of shared resolvers/mutations, example libraries coming soon! https://wilkerlucio.github.io/pathom/#_resolver_data_format
* All the book examples were updated to use the new map format an encourage it, and there are new sections for parallel parser and other sections got updated
* Alias support to rename keys on the output:
* The book examples now use the Query Editor from Pathom Viz, so you can get auto-complete and tracing features as you try to book! (try it out, its pretty cool, try the parallel parser demo example: https://wilkerlucio.github.io/pathom/#_code_pc_parallel_reader_code)
You can find the full change list at https://github.com/wilkerlucio/pathom/blob/master/CHANGELOG.md#2018-11-2522:04wilkerlucio[nubank/workspaces "1.0.1"] is out! This release brings more stability and makes easier to new users to find the features. The spotlight search now uses a better algorithm with score to classify the results. The menu got some design changes and now we include some action buttons to open spotlight, see help and toggle index visibility. You can find the change details at: https://github.com/nubank/workspaces/blob/master/CHANGELOG.md#2018-11-2600:38danielcomptonI've been thinking for a long time and wishing for an opinionated Clojure code formatter. I've started a thread on ClojureVerse with my ideas on building such a tool with the community. I'm interested in other people's thoughts, particularly people involved in tooling. If you think this is a good idea or a bad idea, please let me know on the forums! https://clojureverse.org/t/clj-commons-building-a-standard-code-formatter/3240#2018-11-2601:21vemvIMO:
A standard, automatedly-appliable config would be undoubtedly useful, but creating inflexible software is nothing to be proud about. Particularly given Lisp heritage
gofmt is cool until you realise a few rules make no sense to you, and trying to fight them would be an uphill battle
Rubocop is a better inspiration: has lots of rules, most of them auto-fixable, but nothing prevents you from deviating from them. And the defaults are still massively popular#2018-11-2614:06Philip Hale@U45T93RA6 have you had any experience with prettier in JS?#2018-11-2615:03vemvonly tangentially, it was a Prettier + TSLint combo#2018-11-2615:04vemv(I liked the latter, much similar to Rubocop. configurable, it can autofix things to be in styles A or B. e.g. always-semicolon, never-semicolon)#2018-11-2615:19guillaumeprettier is a time saver when sharing code with others. no more arguing about whitespaces and indentation. I think clojure would benefit from such a tool. Sometimes it’s hard to standardize across environments and different editors.#2018-11-2615:23vemvbut you can also can skip arguing with a configurable tool. I specifically recall using Rubocop with a disagreed config in a larger team, but I was like "whatever, I'll code as usual and run the pre-commit hook autoformatter"#2018-11-2622:27danielcomptonThere is now #formatting for more discussion about this#2018-11-2615:10plexusVideo+transcript of a talk I did last month for the Denver Clojure meetup about clojure.zip https://lambdaisland.com/blog/2018-11-26-art-tree-shaping-clojure-zip#2018-11-2700:03Alex Miller (Clojure team)Clojure 1.10.0-RC2 is now available (just changelog updates, otherwise same as -beta8)#2018-11-2701:56rutledgepaulvJust released [com.vodori/missing "0.1.4"]. It adds a function I’m calling collate and a whole bunch of
basic graph functions that operate on graphs represented by a plain adjacency map. Collate can be
used to create a lookup table from pairs of functions and collections where the function provides the
“primary key” for each item in the corresponding collection. It’s passingly similar to clojure.set/join
except it keeps related elements separate and colocated rather than merging them together
(and so makes no requirement of their data type). https://github.com/vodori/missing#2018-11-2718:18mkvlrWe've improved our Clojure/Script support on Nextjournal and would love to get feedback from fellow Clojurists who'd like to join our private beta! https://twitter.com/usenextjournal/status/1067481738841153536#2018-11-2718:19mkvlr@kommen's Datomic article is a nice and easy way to play with Datomic and MusicBrainz in your browser: https://nextjournal.com/kommen/datomic#2018-11-2817:41miroHi guys! New release of titanoboa is out: https://github.com/mikub/titanoboa
Mainly documentation updates and improved support for java (notes on java interop are here: https://github.com/mikub/titanoboa#-developing-custom-workflow-steps-in-java ).#2018-11-2902:48tony.kayhttps://github.com/fulcrologic/fulcro-incubator
Fulcro Incubator’s state machines now support triggering events on other machines from within a handler. This allows for cooperating state machines in the UI.#2018-11-2911:15phoenixjj@miro - Is it BPM standard compliant ?#2018-11-2911:22plexushi @UBU0HGKHP, it's recommended to keep question/discussion out of #announcements. You can use a thread, or switch to a topic-specific channel.#2018-11-2911:27phoenixjjOops. My bad. Will keep in mind next time.#2018-11-2911:32mirohi @UBU0HGKHP, atm it is not. Though potentially I may be looking into converting to/from BPMN in future if there is any demand for it. I made deliberately this decision as with titanoboa I was trying to keep the definitions of workflows more succinct - so e.g. in titanoboa every step (aka activity in BPMN) is also treated as a gateway as you can define which steps to trigger afterwards based on some conditions. On the level of each step you can also define that if more than one of its gateway conditions are fulfilled that all the following activities will be run in parallel. Then you can at some point define steps that will join the parallel threads of the workflow together etc.#2018-11-2911:34miroalso - as opposed to full blown BPM systems - I am currently using titanoboa mainly for system integration workflows, so it is not (yet) built for workflows that involve human interaction#2018-11-2911:35phoenixjjok cool.#2018-11-2915:57jerger_at_ddaJust released https://github.com/DomainDrivenArchitecture/dda-managed-ide#2018-11-2915:59jerger_at_ddaWe now support installation & configuration of many devops tools like aws-amicleaner, terraform, packer, aws-cli & simple credentials config, dda-cloudspec, mfa tool & much more#2018-11-2922:45danielcomptonClojurists Together has held our first election for people to serve on the committee. The members of Clojurists Together have elected Nola Stowe, Fumiko Hanreich, and Laurens Van Houtven! https://www.clojuriststogether.org/news/2018-committee-election-results/#2018-11-2923:02jsa-aerialHanami 0.4.0 https://github.com/jsa-aerial/hanami and Saite 0.2.0 https://github.com/jsa-aerial/saite released. Updated to latest Vega, Vega-Light and changes to activate latest Vega-Embed capabilities. The major change for this release are full 'picture frames' for visualizations https://github.com/jsa-aerial/hanami#picture-frames. Previously, on the top quadrant was supported. Still a lot of documentation needed for Hanami, but coming along!#2018-11-3000:38eval2020First release of deps-try: Quickly try out dependencies on rebel-readline.
$ clojure -A:deps-try clj-time
[Rebel readline] Type :repl/help for online help info
Loading dependency clj-time RELEASE
[deps-try] Dependencies loaded.
user=>
https://gitlab.com/eval/deps-try/tree/master#deps-try#2018-11-3009:11plexus> I have java10 installed which apparently doesn’t have javax.xml.bind.DatatypeConverter (quote @dcreno)
Since this is an issue people keep running into it's good to know that you can solve this by adding an external dependency, [javax.xml.bind/jaxb-api "2.3.1"]. This also fixes this issue for Java 9 (so no need for --add-modules) and works on older javas as well.#2018-11-3009:38martinklepschIn my experience it's often only javax.xml.bind.DatatypeConverter/printBase64Binary that is used which can also be replaced with
(.encodeToString (java.util.Base64/getEncoder) ~unencoded)
Of course Arne's approach may be more suitable in situations where the code cannot be changed easily.#2018-11-3009:43plexusIf it's your own code then you probably know how to fix this, but there's quite a bit of libraries out there that use these classes but don't declare the dependency. Note that ClojureScript used to be in this category, but has removed its use of java.xml.bind in recent versions.#2018-11-3009:44martinklepschCould you share which library used the xml.bind stuff so I can take a look and maybe open a PR?#2018-11-3012:09David RenoI hit it trying to run ‘cljr-add-project-dependency’#2018-11-3023:18tony.kayFulcro 2.6.17 Released on clojars. This is a minor bug fix release that corrects a bug that could lose the “trailing frame” on refreshes when they come too rapidly.#2018-12-0119:14gnlThe lean and mean (and modular) Ghostwheel 0.3.1 is out with proper Clojure support, half the number of dependencies, easier configuration, composability with other defn-like macros, better error messages, and a ton of improvements around checking and reporting.
Get it, break it, open issues so we can fix it. 🙂
https://github.com/gnl/ghostwheel/blob/master/CHANGELOG.md#031--2018-12-01
P.S. Thanks @tony.kay and @claudiu for some very valuable pre-release feedback.#2018-12-0120:18gnlHelp build a collection of quality function specs for clojure.core and third-party libraries:
https://github.com/gnl/ghostwheel.specs#2018-12-0310:20rborertentacles 0.6.3 has been released on clojars (https://github.com/clj-commons/tentacles):
- Add :bearer-token option in make-request (#12)
- Bump clj-http to 3.9.1 & cheshire to 5.8.1#2018-12-0311:24alanNew clj-boost release -> Now with better docs (https://cljdoc.org/d/clj-boost/clj-boost/0.0.3/doc/readme) and a full tutorial (https://www.rdisorder.eu/2018/12/03/machine-learning-clojure-xgboost/) that's going to work even for Clojure newcomers! https://gitlab.com/alanmarazzi/clj-boost#2018-12-0312:08Alan GhelardiHey everyone. I'd like to announce Emidje: https://github.com/nubank/emidje, an Emacs minor mode that improves the integration between Cider and Midje. In fact, Emidje was strongly inspired on cider-test and provides a set of keybindings to interact with Midje facts in a more pleasant way inside of Emacs. It was built on top of nREPL and serves as a client for midje-nrepl: https://github.com/nubank/midje-nrepl. The Emidje's readme has a comprehensive (hopefully) list of features. Comments, suggestions and criticizes are always appreciated. Thank you.#2018-12-0316:23Alex Miller (Clojure team)Clojure 1.10.0-RC3 is now available https://groups.google.com/forum/#!msg/clojure/oeodsqbyo84/zCuWhTR0BAAJ - please give it a try now and provide feedback in #clojure or in jira so we could move to a final release!#2018-12-0316:29mpenetName change appreciated, thanks. It's clear now#2018-12-0319:08kulminaatorgave my db replication tool the bump to 1.10.0-RC3 as a try , tests still fly. i don't use a whole lot of features though, just the basic clojure itself + data.json + java.jdbc#2018-12-0320:46leonoelcloroutine v1 is out https://github.com/leonoel/cloroutine
design notes and follow up https://clojureverse.org/t/cloroutine-v1/3300#2018-12-0416:05Alex Miller (Clojure team)Per https://github.com/cognitect-labs/REBL-distro/issues/1#issuecomment-444150162, “We’ve added language to the EULA to allow Datomic customers to use REBL at work, and have set up a Patreon membership so non-customers can do the same!” https://www.patreon.com/cognitect#2018-12-0416:24shaun-mahoodProbably a minor clarification - if I have Datomic cloud set up but all instances off, is there a threshold of when I go from being a paying Datomic cloud customer to not?#2018-12-0416:28Alex Miller (Clojure team)a totally non-official answer: if you are paying money for Datomic in a given month, you are a customer, and if not, you should use Patreon#2018-12-0416:26dpsutton$3 a month. what a deal#2018-12-0416:26dpsuttonunless you have datomic in which case you are good to go#2018-12-0416:27eggsyntaxReminder that discussion should go either in a thread, or in another channel. Thanks!#2018-12-0422:05hlshipcom.walmartlabs/schematic 1.2.0
Schematic is a Clojure library which aids in assembling Component systems from configuration data.
* Expects components to implement the Component/Lifecycle protocol
* Prefers pure data for declaring dependencies
* Provides a simple mechanism for assembling/starting just a subset of Components
* Avoids the pattern of passing a large bag of config data through down through levels of Component creation functions
https://github.com/walmartlabs/schematic
New in release 1.2.0:
- Utilities to transform the configuration before assembling the system map
- Improvements to errors related to unknown component references
- Allows for Java objects as components#2018-12-0615:15JakubClosh, unix shell based on Clojure, gets a new release. It adds JVM support and rebel-readline integration which brings syntax highlighting and better tab completion. https://www.reddit.com/r/closh/comments/a3or89/closh_v03_released/#2018-12-0617:27eccentric JTo use as a shell would I add closh to my .zshrc?#2018-12-0620:47JakubI've added a special header to the jar, so it can be used as an executable now. You can then use chsh to use it as a default shell. Be careful to try closh first to make sure it works on your machine so that you don't get locked out from the shell. To make it as default you would do following (afterwards log out and log back for changes to take effect):
chmod +x /path/to/closh-zero.jar
echo /path/to/closh-zero.jar | sudo tee -a /etc/shells
chsh -s /path/to/closh-zero.jar
#2018-12-0620:52eccentric JGood point on testing it. Thanks!#2018-12-0802:19bpiel@U70QD18NP closh-zero.jar is great! thanks!#2018-12-0619:04seancorfieldworldsingles/ws-commons "0.1.1" https://github.com/worldsingles/commons useful little "extensions" to Clojure -- this contains our condp->, condp->>, and condq macros (variants of cond->, cond->>, and condp) and flip etc, which I have been hoping to open source for ages -- any and all follow-up should go to #clojure or DM.#2018-12-0705:07tony.kayFulcro 2.6.18 is on Clojars , and the Developer’s Guide has been updated.
This new release has:
- Added a number of missing SVG tags are to the DOM ns
- Created an improved macro for defrouter called defsc-router. It generates the same thing as defrouter (which still exists and is supported), BUT it has defsc syntax for better IDE integration, and more importantly allows you to do things like define react lifecycle methods on the router itself. This means you can add things like “route change” hooks into the router on :componentDidUpdate and such.
NOTE: Fulcro Incubator has a more powerful UI router, but this makes the built-in one more usable as well.
https://github.com/fulcrologic/fulcro
http://book.fulcrologic.com#2018-12-0709:45practicalli-johnClojureX 2019 conference in London, United Kingdom early bird tickets are available until the end of today (7th). Please see the #events channel for details. We are also looking for a content team to select speakers for the conference.#2018-12-0714:49Alex Miller (Clojure team)Clojure 1.10.0-RC4 is now available - please test before we do a final release! https://groups.google.com/d/msg/clojure/qCthZGzuMrE/7_e5n6SWBwAJ#2018-12-0716:17Adam HelinsFor Kafka user, have a look at this lib. AFAIK, it is the only clj lib offering full support for Kafka Streams ! https://github.com/dvlopt/kafka.clj#2018-12-0716:27gklijsNice might give it a spin on some even sourcing demo project. Was created almost a year ago, and found a few libraries, but all outdated, so did it with some java interop.#2018-12-0716:29Adam HelinsYes, Kafka is a good fit for clj and it deserves a good lib. This one pretty much offers feature parity with the java libs. I have been working on this for the past year. I am quite pleased with the API and its documentation and am now looking for more feedback.#2018-12-0716:32gklijsI have't looked, so it might be in there, but can you supply a function to determine the key based in the value? It might be to specific but was one thing I liked about my small wrapper. Also I build some stuff to go from a specific kind of eden schema's to avro schema's, also putting them into the schema registry.#2018-12-0716:37Adam HelinsWhere would you like to supply such a fn ? When sending a record ?#2018-12-0717:42gklijsNo, when creating the producer.#2018-12-0719:47kidpolloCheckout https://github.com/FundingCircle/jackdaw/ https://www.youtube.com/watch?v=eJFBbwCB6v4&list=PLZdCLR02grLpMkEBXT22FTaJYxB92i3V3&index=5#2018-12-0720:19ccannopen to PRs on Gregor https://github.com/ccann/gregor#2018-12-1109:01Adam Helins@U26FJ5FDM Indeed I think this is too specific. I don't want to create another type on top of the java producer, it is cleaner that way.#2018-12-1113:22gklijsNot as an object, I would more think of it as a 'key-strategy' witch defaults to no keys. If you do have a key-strategy, and you call produce with one argument the key strategy/function is used.#2018-12-0813:33rickmoynihanhttps://github.com/RickMoynihan/nrebl.middleware#2018-12-0911:15Yehonathan SharvitANN the Klipse REPL: a beginner friendly REPL
http://blog.klipse.tech/clojure/2018/12/09/easy-clojure.html
https://github.com/viebel/klipse-repl#2018-12-1019:32andy.fingerhutA transcript of Rich Hickey's recent talk "Maybe Not" from Clojure/Conj 2018 is available here: https://github.com/matthiasn/talk-transcripts/blob/master/Hickey_Rich/MaybeNot.md Many of his talks have transcripts in the same directory, linked here: https://github.com/matthiasn/talk-transcripts/tree/master/Hickey_Rich#2018-12-1022:25andy.fingerhutAnd another talk transcript, this one from Evan Czaplicki, the creator of the Elm programming language, on "The Hard Parts of Open Source": https://github.com/matthiasn/talk-transcripts/blob/master/Czaplicki_Evan/TheHardPartsOfOpenSource.md#2018-12-1102:57yogthosOur local user group in Toronto is organizing [a conference next April](http://clojurenorth.com/). We're aiming for around 200 seats, and here's a link to the [CFP](https://clojurenorth.typeform.com/to/YuveUZ).#2018-12-1121:58Alex Miller (Clojure team)Clojure 1.10.0-RC5 is now available…#2018-12-1220:55mandersonJust released lein-git-down: https://github.com/reifyhealth/lein-git-down, a Leiningen plugin for resolving dependencies from Git as a Maven repository. Supports transitive dependencies of projects that have a project.clj, pom.xml, or deps.edn. Usage and Rationale in the README.#2018-12-1316:50timgilbertAlso in build-tooling related news, we've just released garamond, a tools.deps-based utility which manages versions via git tags and also post-processes clojure-generated pom.xml to include versions, groupIds, and a few other bits of helpful metadata. Follow-ups in #tools-deps please.
https://github.com/workframers/garamond#2018-12-1320:16johndispacio is an experimental, simple, predicate stack dispatch system. Predicates are tested in the order they are defined and the first truthy match wins.
Features being worked on:
- similar interface to defmethod
- isa? hierarchies, similar to defmethod
- prefer a la prefer-method
- dispatch on arbitrary functions or specs, datomic/datalog queries, core.match, etc.
- extend functions to data types, rather than data types to functions
- small, simple, cljc codebase
See the examples in the readme: https://github.com/johnmn3/dispacio
This is an very alpha release - expect changes. If you see anything unexpected, please open an issue.#2018-12-1411:40martinklepschVery happy to announce that you can now use cljdoc as a documentation source in the documentation browsing app Dash (Mac only): https://clojureverse.org/t/dash-app-now-supports-cljdoc/3365 — demo video: https://www.youtube.com/watch?v=bnHBwi8Ygd0#2018-12-1416:49vaer-kLooks like linux users can enjoy this on Zeal: https://zealdocs.org/#2018-12-1416:50vaer-kAnd other platforms: https://blog.kapeli.com/dash-for-ios-android-windows-or-linux#2018-12-1417:09martinklepschHave you tried this? I think at this point there’s more work required to make this work with Zeal - see recent conversations in #cljdoc #2018-12-1418:28zaneThis is so exciting! I've been eagerly awaiting this. Thank you for your hard work.#2018-12-1419:21martinklepsch@U050CT4HR thanks for coming by to say this; feedback like this means a lot 😊❤️#2018-12-1419:22martinklepschLet me know if you run into any issues #2018-12-1518:33NickSuper cool. Thanks @U050TNB9F! Hopefully this will keep all my doc lookups to dash instead of dozens of chrome tabs.#2018-12-1712:48bruno.bonacci[ANN] [amalloy/ring-buffer "1.3.0"]
Hi,
a new version of amalloy/ring-buffer (1.3.0) is available on Clojars (https://clojars.org/amalloy/ring-buffer/versions/1.3.0)
with the following changes:
- amalloy/ring-buffer github project is now transferred to clj-commons/ring-buffer (https://github.com/clj-commons/ring-buffer)
- Fixed incompatibility with Java11 (https://github.com/clj-commons/ring-buffer/pull/11)
- added nth indexing for random access lookups (https://github.com/clj-commons/ring-buffer/pull/9), credit: Pedro Martins - @pjago
please note that:
CLJ Commons is a community-led project to build up the supporting infrastructure around Clojure to make it a better experience for people new to Clojure, as well as existing Clojurists, like maintaining open-source projects that, for any reason, the author cannot maintain, check https://clj-commons.org/.
bye,
Bruno#2018-12-1717:25Alex Miller (Clojure team)Clojure 1.10 has been released! https://clojure.org/news/2018/12/17/clojure110#2018-12-1718:04miikkaGreat! There were no changes after 1.10.0-RC5, right?#2018-12-1718:05eval2020https://clojurians.slack.com/archives/C03S1KBA2/p1545067907549300#2018-12-1722:33aviThank you Alex for all your hard work in shepherding this release!#2018-12-1801:39jimmyGreat work Clojure team. #2018-12-1901:43bbrinckI’ve just released Expound 0.7.2
- Support for changes in spec 0.2.176 and Clojurescript 1.10.439
- Bug fixes, notably for specs like keys* and which used conform
- New cljdoc docs https://cljdoc.org/d/expound/expound/0.7.2/doc/readme
Please feel free to ask questions in #expound#2018-12-1908:12Yehonathan SharvitAnother Klipse blog post: Clojure 10 features with interactive code snippsets https://twitter.com/viebel/status/1075299680844693504#2018-12-2005:21shaun-mahoodhttps://mobile.twitter.com/ArcadiaTechInc/status/1075447922781798404#2018-12-2005:22shaun-mahood(I’m not involved at all with the project, just think it’s pretty awesome) #2018-12-2005:59anirudhWe have released sentry-clj.async, a library that enables async push of events to sentry. We will love your feedback and contribution
https://clojars.org/tech.gojek/sentry-clj.async#2018-12-2109:00plexusThe Heart of Clojure Call for Speakers is now OPEN. Heart of Clojure is a new Clojure conference coming to Belgium next August, with the aim to bring together the European community. (questions and follow-up in #events please) https://mailchi.mp/53e19cc20b4b/call-for-speakers-is-now-open#2018-12-2514:05mogenslundLiquid 1.0.0 has been released. Fully functional core. Clojure 1.10 as default.
https://github.com/mogenslund/liquid#2018-12-2515:33Vincent CantinNice work#2018-12-2515:39mogenslundThank you 🙂#2018-12-2519:24jsa-aerialNice - what would be the issues to surmount to get this working in ClojureScript?#2018-12-2521:02mogenslundI actually did some experiments with Liquid to figure out how it would work using ClojureScript. I did not do much else than remove some JVM specific code and some IO. It is very experimental!! The project is here https://github.com/mogenslund/liquidjs
Eval does not always work, functionality is lacking and performance is not snappy! It can be executed in a browser or through lumo. Some time ago I deployed the experiment here as well: http://salza.dk/liq/#2018-12-2522:00jsa-aerialGreat! Thanks, I'll take a look!#2019-01-0311:09Saikyunwow amazing! I've often thought about making something like this, so I'll definitely try it out#2018-12-2515:33Yehonathan SharvitLazy sequences are not compatible with dynamic scope: https://blog.klipse.tech/clojure/2018/12/25/dynamic-scope-clojure.html#2018-12-2520:20vemv🙂 also explained in https://stuartsierra.com/2013/03/29/perils-of-dynamic-scope#2019-12-3019:56Yehonathan SharvitThanks for mentioning this article. It’s a really good one#2018-12-2705:38ahungryI just put up a new blog post (writing a FUSE + REST api integration in Clojure to show REST API results in a local FS): http://ahungry.com/blog/2018-12-26-Clojure-is-Capable.html#2018-12-2705:53rutledgepaulvHad no idea writing a fuse implementation was relatively straightforward. Now I’m wondering what other things I could represent as file systems…#2018-12-2713:09ahungryI think it makes a great bridge / abstraction over more complicated data protocols like networking and such. You could even provide a fuse system to micro service users instead of an sdk for instance , and let them interact with records via their language of choice, even if it didn't support networking #2018-12-2721:48kwladykaI am asking for feedback
I made a library to validate form inputs in CLJS with spec and fn.
https://github.com/kwladyka/form-validator-cljs
I would love to know if you will use it and get constructive feedback on #clojurescript channel!#2018-12-2722:08seancorfieldChlorine 0.0.6 is available -- a Clojure(Script) plugin for Atom, that works with a Socket REPL -- https://atom.io/packages/chlorine -- all follow-up to
(I'm not the creator but I am an active user and recently blogged about my switch to Chlorine from ProtoREPL http://corfield.org/blog/2018/12/19/atom-chlorine/ )#2018-12-2821:55jerger_at_ddacooooool ... in our next release of https://github.com/DomainDrivenArchitecture/dda-managed-ide I will add a atom-chlorine setup as alternative to atom-protorepl 🙂
Which other atom plugins are u using for your clojure development?#2018-12-2903:10dima_condur#chlorine I gave a try to Chlorine 0.0.4 then 0.0.5 then 0.0.6 and still getting errors when trying to refresh the namespaces.#2018-12-2903:11dima_condur#chlorine
Failed to refresh
{:ex #error {:via [{:type clojure.lang.Compiler$CompilerException, :message "Syntax error compiling var at (unrepl-reader-703:3:117).", :data {:clojure.error/phase :compile-syntax-check, :clojure.error/line 3, :clojure.error/column 117, :clojure.error/source "unrepl-reader-703", :clojure.error/symbol var}, :at [clojure.lang.Compiler analyzeSeq "Compiler.java" 7114]} {:type java.lang.RuntimeException, :message "Unable to resolve var: clojure.test/*load-tests* in this context", :at [clojure.lang.Util runtimeException "Util.java" 221]}], :trace [[clojure.lang.Util runtimeException "Util.java" 221] [clojure.lang.Compiler$TheVarExpr$Parser parse "Compiler.java" 720] [clojure.lang.Compiler analyzeSeq "Compiler.java" 7106] [clojure.lang.Compiler analyze "Compiler.java" 6789] [clojure.lang.Compiler analyze "Compiler.java" 6745] [clojure.lang.Compiler$InvokeExpr parse "Compiler.java" 3888] [clojure.lang.Compiler analyzeSeq "Compiler.java" 7108] [clojure.lang.Compiler analyze {:repl-tooling/... (unrepl.repl$JheDmiOxCQTNBrUuDsZnDvb59lc/fetch :G__1284)}] {:repl-tooling/... (unrepl.repl$JheDmiOxCQTNBrUuDsZnDvb59lc/fetch :G__1285)}], {:repl-tooling/... nil} {:repl-tooling/... (unrepl.repl$JheDmiOxCQTNBrUuDsZnDvb59lc/fetch :G__1286)}}, {:repl-tooling/... nil} {:repl-tooling/... (unrepl.repl$JheDmiOxCQTNBrUuDsZnDvb59lc/fetch :G__1287)}}
#2018-12-2903:24seancorfield@U3K24G7C5 Turn off that option. I have the "simple" (just :reload) option selected and have it set to not refresh on save.#2018-12-2903:24seancorfieldI've always found auto-refreshing in editors to be a giant pain and I always turn it off.#2018-12-2903:25seancorfieldAnd please take this to #chlorine -- as requested in the announcement!#2018-12-2903:58dima_condurThanks @U04V70XH6 I will try the “simple” reload option#2018-12-2723:38AdaśPublishing a Clojure getting started type article/tutorial soon. I take a pretty unusual approach. It's windows focused so would especially appreciate windows users trying it. All feedback appreciated, thank you! https://github.com/adasomg/the-missing-clojure-intro#2018-12-2817:32AdaśPublished on http://dev.to. Thanks for the feedback on github and couple of stars.#2018-12-2805:54tony.kayFulcro 2.6.19 is on Clojars. Adds support for the new getDerivedStateFromError lifecycle method.#2018-12-2814:43jerger_at_ddaWe just released dda-serverspec. It comes with a new test for checking routes on servers:
https://github.com/DomainDrivenArchitecture/dda-serverspec-crate#2018-12-2815:17eccentric J📚 Book Report 0.1.0 Released! Turn your Clojure files into structured, interactive notebooks. Aims to make learning from books easier. https://github.com/jayzawrotny/book-report#2018-12-2815:25cjsauerReally cool! Thanks for sharing.#2018-12-2815:33eccentric JThanks!#2018-12-2818:31jerger_at_ddaWe just released dda-managed-vm. Now redshift is included in our vm installation.
https://github.com/DomainDrivenArchitecture/dda-managed-vm#2019-12-3000:52mauricio.szaboJust published a new version of Chlorine, atom package to work with Clojure over Socket REPL. In this version, some improvements, bugfixes, and a great problem that we had with lots of println errors that could break the plug-in: https://atom.io/packages/chlorine
Discussions on #chlorine channel!#2019-12-3016:00ikitommi[metosin/reitit 0.2.10] is out! Reitit is a fast data-driven router for Clojure(Script). What’s new:
* small - enhancements to the core routing
* new fast :quarantine-router for route trees with conflicts
* pedestal support via optional reitit-pedestal module: https://metosin.github.io/reitit/http/pedestal.html
* polished ring request & interceptor context diff loggers: https://metosin.github.io/reitit/http/transforming_interceptor_chain.html#printing-context-diffs
* initial support for http-reitit Interceptors on ClojureScript, thanks to the latest Sieppari.
Changelog: https://github.com/metosin/reitit/blob/master/CHANGELOG.md#0210-2018-12-30
Big thanks to all the contributors. #reitit for chatting.#2019-01-0110:24bozhidarHey everyone!
Happy New Year! Live long, live well, have fun and prosper!
To help you start the New Year on the right foot and with the proper mood I’ve just cut CIDER 0.19!
The release notes are here https://github.com/clojure-emacs/cider/releases/tag/v0.19.0
The highlights are:
* lots of improvements to the new connection management system
* some fixes for the changes to the error messages in Clojure 1.10
That’s going to be the final CIDER release that will work with the legacy tools.nrepl, so if you’re a boot or lein user you should definitely upgrade to their latest versions which target the modern nREPL.
Cheers!#2019-01-0117:47wilkerlucioHello everybody and happy new year! I like to announce I'm launching the first draft for the EQL language specification/documentation. EQL is a Clojure (EDN) based query languages; it compares to GraphQL in sets of features to request structured information, but uses only EDN data structures to describe the requests.
The first draft I'm leaving an open PR on Github, so you have the chance to comment and improve it before getting into master. EQL is intended to be a general syntax that can be used by multiple projects on the Clojure community; it's currently used on Om.next, Fulcro, and Pathom.
If you like to give your input to it, please check the PR at https://github.com/edn-query-language/eql/pull/1/files#2019-01-0222:30seancorfieldhttps://github.com/clojure-expectations/clojure-test [expectations/clojure-test "1.0.1"] -- clojure.test for Expectations : A clojure.test-compatible version of the classic Expectations testing library. All follow-up to #expectations (for anyone who was following the 2.2.0 development of Expectations, this is the fourth version of that piece of work, now split into its own library -- and used by all our tests at World Singles Networks!)#2019-01-0415:20yogthosWe've started announcing talks that have been accepted, so far we have confirmed [Mike Fikes delving into the ClojureScript compiler with his "Expedience via Inference" talk](https://twitter.com/clojurenorth/status/1080937757646696453) and [Tommi Reiman from Metosin with "Reitit, the Ancient Art of Routing"](https://twitter.com/clojurenorth/status/1080578609641938947). Stay tuned for more announcements as we select more talks this month.#2019-01-0415:33eggsyntaxI've wished so many times that markdown worked in slack...
Awesome talks!#2019-01-0519:20yogthosyeah I know, I always forget that it's only partially supported 🙂#2019-01-0820:31danielcomptonOddly, Markdown links are supported if you post via the Slack API#2019-01-0922:42yogthosslack works in mysterious ways ¯\(ツ)/¯#2019-01-0506:29Shantanu KumarHappy new year, everyone! I would like to announce Calfpath - a fast and flexible Ring based routing library: https://github.com/kumarshantanu/calfpath for the JVM. Clojure ML post: https://groups.google.com/forum/#!topic/clojure/iBH84dYY49E Follow up chat in #bract please.#2019-01-0510:07Adam HelinsHere is a fun but serious library for handling GPIO on a Linux system in a standard way (eg. Raspbian on the Raspberry Pi) : https://github.com/dvlopt/linux.gpio.clj#2019-01-0611:06val_waeselynckscope-capture-nrepl 0.3.0 is out, updates the nREPL dependency to use nrepl/nrepl. Still compatible with the older tools.nrepl. Thanks @rickmoynihan! https://clojars.org/vvvvalvalval/scope-capture-nrepl#2019-01-0611:41rickmoynihanwhat were your thoughts on the other PR?
https://github.com/vvvvalvalval/scope-capture-nrepl/pull/6#2019-01-0612:37val_waeselynck@rickmoynihan already commented on the issue - I'll probably submit a variant of the PR making this behaviour optional, but your PR has had the benefit of prompting me to work on this 🙂#2019-01-0614:46rickmoynihanahh thanks… I’d missed that 🙂#2019-01-0714:59Alex Miller (Clojure team)Please share your thoughts in the annual State of Clojure survey! https://clojure.org/news/2019/01/07/clojure-2019-survey#2019-01-0715:24Vincent CantinFilled up already. Thank you for asking us about Clojure!#2019-01-0718:43hlshipcom.walmartlabs/lacinia 0.31.0 and com.walmartlabs/lacinia-pedestal 0.11.0
Lacinia is an open-source implementation of Facebook's GraphQL specification, in Clojure.
GraphQL is an outstanding approach to getting diverse clients and servers exchanging data cleanly and efficiently.
GitHub repo: https://github.com/walmartlabs/lacinia
Documentation: https://lacinia.readthedocs.io/en/latest/
Featured changes in 0.31.0:
- Limited support for custom directives
- Ability for field resolvers to provide extensions or warnings along with/instead of a value
- BREAKING CHANGES to simplify/improve custom scalars
- Fixed nils getting promoted into empty lists
- Fix compatibility with Clojure 1.8 and with JDK 11
lacinia-pedestal provides the Pedestal support to expose web endpoints backed by Lacinia's GraphQL.
GitHub repo: https://github.com/walmartlabs/lacinia-pedestal
Documentation: https://lacinia-pedestal.readthedocs.io/en/latest/
Featured changes in 0.11.0:
- Update to GraphiQL 0.12.0
- Fix Clojure 1.8 compatibility#2019-01-0810:38Adam HelinsUpdated to Kafka 2.1 https://github.com/dvlopt/kafka.clj#2019-01-0812:57roostaHello all, I'd like to announce Herb, a CSS styling library for ClojureScript that focuses on component level styling using functions:
https://github.com/roosta/herb#2019-01-0813:27wilkerlucioEQL specification is out! It still a work in progress, next steps will document how to use the specs to validate and generate queries, also more docs for the core api. http://edn-query-language.org#2019-01-0815:01Ivanthanks, that's really interesting#2019-01-0822:50jsa-aerialHi everyone, announcing version 0.5.1 of Hanami https://github.com/jsa-aerial/hanami, the go to lib/(optional) framework for developing your Vega/Vega-Lite powered domain specific visualization applications. This version provides support for chartless/empty picture frames enabling full hiccup/re-com enabled text based areas. These can be used in tab layouts just like frameless charts/plots/layouts and those with standard picture frames. All can be mixed together in a given tab 'page'. New file based data sources covering clj, edn, json, and csv. This supplements the previous values, url, and named channel data sources. Stronger and more general support for application specific routes and landing pages. New template support for tree layouts - the first of several new network/graph layouts to come. New (experimental) template for overview+detail.#2019-01-0822:51jsa-aerialAlso pleased to announce version 0.3.2 of Saite https://github.com/jsa-aerial/saite. Saite started out as a fairly simple exploratory graphics and visualization application (built on Hanami) but now is evolving toward a new highly capable notebook. This version provides several cool new capabilities, including CodeMirror editors for JS/JSON and Clj, bidirectional conversions, quick modal panel popup renderings, and all the new stuff from Hanami. Also, there are a number of issues concerning this evolution towards being a full notebook, that I'd appreciate feedback on. Or feel free to open new issues if you have other thoughts or 'want to haves' you would like to record.#2019-01-0920:04Alex Miller (Clojure team)It would be great to have your input on the 2019 Clojure Survey! https://www.surveymonkey.com/r/clojure2019
If you’ve already completed it, please forward it on to appropriate internal company chatrooms or your local meetup mailing list! Thanks!#2019-01-1007:04danielcomptonClojurists Together is an organisation dedicated to funding and supporting open source software, infrastructure, and documentation that is important to the Clojure and ClojureScript community. In the last 12 months we've funded improvements to DataScript, Kaocha, cljdoc, Shadow CLJS, CIDER, ClojureScript, clj-http, and Figwheel.
We've just finished surveying our members on what they see as important for our next funding round. The main things people were interested in: developer experience tools (55%), build tooling (52%), documentation (49%), error messages (44%), IDE support (35%), test tooling (30%), linters (30%), and data analysis/processing frameworks (26%). Specific projects mentioned were CIDER, Clojure.spec, Re-frame, REPLs, Leiningen, Hiccup, Reagent, Aleph, Re-natal, Figwheel, LightTable, and Datahike.
If you maintain a Clojure project, especially one in the areas of focus, or a named project, please consider applying for funding.
You can apply at https://www.clojuriststogether.org/open-source/. Applications close on 15th Jan, Midnight PST, and the Q1 funding round goes from February 1 - April 31.
If you'd like help preparing an application, or have any more questions, you can contact me or any of the team (https://www.clojuriststogether.org/team/).#2019-01-1008:33pezWhat are developer experience tools?#2019-01-1014:17eggsyntaxHi! Reminder that follow up discussion to posts in #announcements should either go in a thread or in another channel. Thanks!#2019-01-1008:44robert-stuttaford@pez figwheel, cider, etc#2019-01-1008:48pezThanks. Figwheel fits the description for me, but I think of cider as IDE support.#2019-01-1010:55jaihindhreddyIDEs themselves are DX tools aren't they? 😃#2019-01-1015:12pezIndeed, but they had their own category, so that's why I wondered. 😃#2019-01-1015:14rickmoynihannon mece categories! 😢#2019-01-1015:46pezHahaha!#2019-01-1015:47pezWikipedia: ”The MECE concept has been criticized for not being exhaustive, as it doesn't exclude superfluous/extraneous items.”#2019-01-1016:02rickmoynihanI think that criticism of MECE is bs though.
To include other principles inside MECE itself seems hypocritical to me, i.e. the principle of minimality is superfluous and extraneous to the MECE property.
Minimality of categories is certainly another principle you should apply to categorisations, but it feels like a category error to try and include all other principles inside this one. It’s kinda like trying to represent everything with a single mega-category “All Principles”.#2019-01-1016:09eboersmaNet Promoter Score, a pure clojure library for calculating NPS values has been released https://clojars.org/net_promoter_score#2019-01-1018:24dcjCool! Have you looked at kixi.stats? #data-science channel may also be interested....
https://github.com/MastodonC/kixi.stats#2019-01-1018:29eboersma@U07TTE6RH I haven't, thanks for the tip. This was mostly a learning exercise to put together something simple; I'm just getting started in the community, so I feel confident there's lots of stuff I've missed!#2019-01-1016:50borkdudeannounced it other places, but not here: https://github.com/borkdude/re-find, a library, CLI tool and website to find clojure.core functions (or any other function that has a spec)#2019-01-1117:08wilkerlucio[nubank/workspaces "1.0.3"] is out! This version adds a simpler setup configuration to use with #shadow-cljs, thanks @tony.kay for the implementation and @thheller for help tuning it up. More info https://github.com/nubank/workspaces#with-shadow-cljs#2019-01-1118:45royalaidThis makes my life so much better, thank you!#2019-01-1120:31WhoNeedszZzWaiting for Github Pages to be back up to see the example provided#2019-01-1122:13Alex Miller (Clojure team)My weekly Clojure journal about work in Clojure dev - http://insideclojure.org/2019/01/11/journal/#2019-01-1210:23schmeereally appreciate these journals, it’s great to get a look under the hood of what’s going on in the Clojure space! 🙂#2019-01-1521:36uwosame. thanks so much Alex!#2019-01-1201:54Shantanu KumarI'm pleased to announce Stringer library (v0.3.1) for faster string concatenation: https://github.com/kumarshantanu/stringer with included perf benchmarks. Mailing List announcement: https://groups.google.com/forum/#!topic/clojure/McmBZ3HStO8#2019-01-1323:17Noah BogartI found strdel a little hard to grok at first because I didn’t expect a join action to have a delete abbreviation#2019-01-1405:11Shantanu Kumar@UEENNMX0T The del in strdel is for "delimited", as in "delimited string".#2019-01-1405:11Shantanu KumarPerhaps I should have thought about strjoin or something similar.#2019-01-1417:15Noah BogartNo worries, I realized how you meant it after reading the examples, just caught me off guard. Thanks for the library! #2019-01-1217:26nilrecurring[dhall-clj "0.2.0"] is out! dhall-clj is a Dhall to Clojure compiler - you’ll want to use it to take advantage of Dhall in your Clojure programs.
You can use Dhall as a sane, typed configuration language (instead of YAML/JSON/EDN), as a templating language (instead of e.g. Jinja) or as a safe and efficient protocol to send code on the wire (like Protobuf, but better!)
More info and live demo for Dhall at https://dhall-lang.org
More info and quickstart for dhall-clj at https://github.com/f-f/dhall-clj#2019-01-1218:26borkdude@nilrecurring Interesting! I was just thinking about Dhall today and if it could be useful in relation to Clojure#2019-01-1218:45nilrecurring(Let's move to a thread, as this channel is for announcements only)#2019-01-1218:48nilrecurringI agree! The endgame for Dhall is to eventually have an integration with all the languages. This Clojure compiler is the second fully compliant implementation (the first one is the reference implementation in Haskell, which also works in js), and a Python and a PureScript implementation are well underway#2019-01-1218:31borkdudenever actually tried it before#2019-01-1306:02matthiasaka is a command line tool for sharing and using clojure aliases:
https://github.com/matthias-margush/aka#2019-01-1411:14borkdudeAwesome. A tap for cider-nrepl would be cool!#2019-01-1411:53practicalli-johnLondon (UK) Clojurians coding dojo on Tuesday evening this week. A chance to meet the community and see how friendly we all are. This event is at the new offices of Signal Media who are the hosts and sponsors for this evening.
We get together and decide what exercises or technology to do that evening, then split into small groups and start learning together. The event is open to all levels and we ensure everyone has the support needed to be involved.
https://www.meetup.com/London-Clojurians/events/wndklqyzcbsb/#2019-01-1422:03Vincent CantinIs it an event for kids or adults?#2019-01-1609:54practicalli-johnSorry, I missed your question. This event is for 18 years or older, unless accompanied by a parent or legal guardian.#2019-01-1419:46alanclj-boost 0.0.4 is out! There's a very important bug fix if you have a European (or any Locale with a comma decimal separator) and a new dmatrix identity method!!!! https://clojars.org/clj-boost#2019-01-1422:54jsa-aerialHanami 0.6.0 https://github.com/jsa-aerial/hanami is now available. Mostly a clean and refactor release. However, also resolves an issue with shadow-cljs - Thanks @pfeodrippe !#2019-01-1503:52temcoamazing#2019-01-1508:44bozhidarCIDER 0.20 (Oslo) is out https://metaredux.com/posts/2019/01/15/cider-oslo.html Enjoy!#2019-01-1514:41eccentric JAwesome work! Please get some rest 🙂#2019-01-1513:01Adam HelinsKafka client, new release supporting the creation of mock consumers and producers https://github.com/dvlopt/kafka.clj#2019-01-1522:00Shantanu KumarI'd like to announce BRACT: A data-driven application initialisation framework https://bract.github.io/ - the Clojure ML post is here: https://groups.google.com/forum/#!topic/clojure/zaWBclbVt6Y Follow up conversation in #bract please.#2019-01-1522:47tony.kayVersion 0.0.27 of Fulcro Incubator’s UI State Machines just got some additional helpers.
https://github.com/fulcrologic/fulcro-incubator#2019-01-1611:06Vincent CantinCritical security update on Sente, maybe worth announcing here: https://github.com/ptaoussanis/sente/blob/master/CHANGELOG.md#v1140-rc2---2019-jan-12#2019-01-1614:54Alex Miller (Clojure team)Just a reminder that the State of Clojure 2019 survey is still underway - if you haven’t completed it yet, it takes about 5 minutes and would be great to have your feedback. https://www.surveymonkey.com/r/clojure2019#2019-01-1708:50Cam SaulHey everyone, if you're anything like me, it makes you happy when your code is pretty. And sorted ns declarations, with unused stuff removed, are the prettiest type of ns declarations.
With that in mind I searched high and low for a linter that could help my pretty ns declarations stay pretty. Devastatingly, I could find nothing of the sort. The future seemed bleak.
Little did I know the answer to my troubles was inside me all along. I opened up my REPL and before I knew it a brand new linter started coming together right before my very eyes. Behold: https://github.com/camsaul/lein-check-namespace-decls . Enjoy!#2019-01-1708:54vemvInteresting work! I'll keep an eye on it
There's https://github.com/gfredericks/how-to-ns as well#2019-01-1708:56Cam SaulOh man, can't believe I couldn't find that one. Well, more linter options are always a good thing IMO#2019-01-1708:59vemvsure thing, it's valuable to have something that matches the nrepl tooling 🙂#2019-01-1716:02ccannClojure linter that checks that namespace declarations are cleaned the way `clj-refactor` would clean them. Leiningen plugin.
🙌 🙌#2019-01-1716:04ccannmy non-emacs-using coworkers will be happy they can know what the actual rules are#2019-01-1716:24vemvMy only complaint about clj-refactor is that it can be wrap the ns form to 80 columns too agressively... with no possible fix afaict
But I do appreciate from it that it actually can clean the ns form in ways that a static tool can't#2019-01-1719:43Cam Saul@U45T93RA6 internally refactor-nrepl (the Clojure middleware part of clj-refactor) prints namespaces with clojure.pprint/pprint, so you can configure that.
I usually do something like this in one of my core namespaces to change the default printing width from 80 to 200:
(intern 'clojure.pprint '*print-right-margin* 200)
clj-refactor then won't wrap things unless they exceed 200 characters in width.#2019-01-1719:45Cam SaulEither way the linter only checks that the namespace forms are = in the Clojure sense so you can make them wide or narrow as you want and the linter won't complain.#2019-01-1714:12miroHi guys, new release (0.7.3) of titanoboa is out. It now supports java 8-11 (so lots of javas then ☕) - the main improvement is that the new version can now load external maven dependencies during runtime even on java 9 and higher (that was a tough one, but it works now). https://github.com/mikub/titanoboa#2019-01-1718:21ikitommi[metosin/reitit "0.2.11"] is out! Reitit is a fast data-driven router for Clojure(Script) supporting browser-apps, ring, pedestal and sieppari. Notable changes:
- segment-router is rewritten to use a custom Java-backed Segment Trie on the JVM, making it 2x faster in the benchmarks
- linear-router is also backed by the the Segment Trie, making it 2-4 faster in the benchmarks
- guide on how to use expound as spec-coercion error printer
- FIX: route-data expansion can be extended
https://cljdoc.org/d/metosin/reitit/0.2.11/doc/introduction#2019-01-1721:49tony.kayFulcro 2.8.0 is on Clojars. This new version adds “Pre-merge” support by @wilkerlucio. This feature allows you to augment how data merge works at the component level.
https://github.com/fulcrologic/fulcro
http://book.fulcrologic.com/#PreMerge#2019-01-1821:56Alex Miller (Clojure team)Just killing time before the end of the day? Why not fill out the State of Clojure 2019 survey? https://www.surveymonkey.com/r/clojure2019#2019-01-1913:57pezFor next year, maybe ask what news letters/podcasts/youtube channels people follow?#2019-01-1902:40Alex Miller (Clojure team)http://insideclojure.org/2019/01/18/journal/ - my journal for the week on spec and clojure.main errors#2019-01-2015:52yogthosLet us know what kinds of talks you'd like to see at Clojure/north this year https://clojurenorth.typeform.com/to/lW2F8M#2019-01-2114:22Alex Miller (Clojure team)If you haven’t completed the State of Clojure 2019 survey - tomorrow is the last day! https://www.surveymonkey.com/r/clojure2019#2019-01-2218:39noprompthttps://clojars.org/meander/alpha#2019-01-2322:52eggsyntax"Meander is a Clojure/ClojureScript data transformation library which combines higher order functional programming with concepts from term rewriting and logic programming. It does so with extensible syntactic pattern matching, syntactic pattern substitution, and a suite of combinators known as strategies that run the gamut from purely functional to purely declarative."#2019-01-2407:46jerger_at_ddaWe've released a new version of dda-serverspec. We've added support for checking network routes - thanks to @razum2um 🙂
More details are described in our blog: https://domaindrivenarchitecture.org/
Code&uberjar can be found on github: https://github.com/DomainDrivenArchitecture/dda-serverspec-crate#2019-01-2409:57Adam HelinsNew release of this fully featured up-to-date Kafka client. Now supports running a fake Kafka Streams runtime which doesn't need a running cluster. Idea for testing at the repl your KS apps written in clojure, or just learning the lib ! https://github.com/dvlopt/kafka.clj#2019-01-2412:19bpielhttps://stackoverflow.blog/2019/01/23/our-2019-developer-survey-is-open-to-coders-everywhere/#2019-01-2415:23shar1zhey there - we just open sourced a production library in Clojure for Aerospike for those interested : https://medium.com/appsflyer/clojure-and-aerospike-e2b9a9423f57#2019-01-2518:06val_waeselynckscope-capture-nrepl 0.3.1 released, prevents you from putting your REPL in an unusable state by inputting a non-existent Execution Point Id. https://github.com/vvvvalvalval/scope-capture-nrepl
Thanks @rickmoynihan#2019-01-2521:52rickmoynihanThanks a million for this. I know it’s a small change, but it removes a frustratingly sharp edge from an otherwise fantastic tool.#2019-01-2723:11wilkerlucioEQL docs for clojure.spec are out! This explains how you can use clojure.spec to validate EQL syntax. I like to bring attention also to the generative docs, they explain how to generate queries at random and also how to customise the generators to constraint the generation to very specific needs, this can be an interesting read for anyone looking for examples on how to setup complex configurable generator setups, I hope you enjoy! https://github.com/edn-query-language/eql#clojure-specs#2019-01-2723:19eggsyntaxSummary for folks unfamiliar with EQL:
"EQL is a declarative way to make hierarchical (and possibly nested) selections of information about data requirements.#2019-01-2816:57metasoarousHello everyone. I'm excited to announce the release of Oz 1.5.2.
https://github.com/metasoarous/oz
Oz is a simple Clojure & ClojureScript data visualization library built around Vega-Lite & Vega.
In Vega-Lite & Vega, data visualizations are specified as pure data descriptions about how to map properties of your data and interactions to aesthetics of a visualization, and is thus an eminently Clojuresque approach to the art of data visualization
Oz specifically comes with the following features:
• REPL based workflow
• Reagent components for dynamic web applications
• Jupyter notebook support via the Clojupyter & IClojure kernels
• Load markdown files, with a notation for embedding visualizations as code blocks
• The ability to combine Vega-Lite & Vega with hiccup for creation of scientific documents
• Export of visualizations and scientific documents to live/interactive html files via the export! function
• A publish/sharing API which pushes visualizations or scientific documents (as pure data) to a GitHub gist, and prints out a url for loading them up from either the Vega Editor tool (https://vega.github.io/editor) or via http://ozviz.io (for Vega(-Lite) + hiccup documents)
To learn more about Vega-Lite, Vega or Oz, please check out https://github.com/metasoarous/oz.
Thanks for your time!#2019-01-2817:04asierHi all, our team has released several Duct modules today.
https://github.com/magnetcoop/buddy-auth.jwt-oidc
https://github.com/magnetcoop/object-storage.s3
https://github.com/magnetcoop/scheduling.twarc
https://github.com/magnetcoop/secret-storage.aws-ssm-ps#2019-01-2817:05asierAnd also a library for encrypting and decrypting arbitrary Clojure values: https://github.com/magnetcoop/encryption#2019-01-2817:08victorbNot sure if it really fits here, please tell me if it doesn't.
Recently started working on a new project called Cube. It's a ipfs / ipfs-cluster management application, entirely written in Clojure/Clojurescript, made for desktop/server deployment. It's still in it's early stages, but if you're interested in some open source Clojure applications together with distributed storage (and decentralization!), check it out! You can find it here: https://github.com/ipfs-shipyard/cube#2019-01-2819:57Alex Miller (Clojure team)InsideClojure journal 2019.4 - http://insideclojure.org/2019/01/28/journal/#2019-01-2905:11podviaznikovhey everyone! I've got access to GitHub actions feature and decided to created few actions useful for Clojure projects:
- boot wrapper https://github.com/repetitive/actions/tree/master/boot
- lein wrapper https://github.com/repetitive/actions/tree/master/boot
- Clojure eval inside GitHub issue comments https://github.com/repetitive/actions/tree/master/clojure#2019-01-2909:06plexusI just released a new version of Kaocha, the all-in-one Clojure test runner. This is the most substantial release in a while, with improvements to the --watch mode, and several new plugins (hooks, system notifications, clojure/java version filter, dynamic bindings). Full CHANGELOG: https://cljdoc.org/d/lambdaisland/kaocha/0.0-389/doc/changelog . Many thanks to @rgm, @danielcompton, and @magnars#2019-01-2910:25jacekschaeThere is a new video course I’m working on! It opens tomorrow! https://www.learnreframe.com/#2019-01-2913:32athomasoriginalLooks great!#2019-01-2922:08WhoNeedszZzIt's cool that you're doing this, but something to note - your example code is not idiomatic. You don't have app-db initialized, where you would set the counter to 0 instead of using get-in, update-in, and fnil. I understand you may have done this just to shorten the code, but it is misleading.#2019-01-2922:09WhoNeedszZzIt would also be helpful to indicate that in a real re-frame app that code is not all in the same ns.#2019-01-3008:56jacekschaeThanks for your comments. I see you point. The JS part is also not idiomatic because it would be split to different files. But this still doesn’t change the fact that Clojure is very expressive and there is no other language that gives so much Bang! for a line of code. Take a look at this comparison https://medium.freecodecamp.org/a-real-world-comparison-of-front-end-frameworks-with-benchmarks-2018-update-e5760fb4a962.#2019-01-3008:57jacekschaePS. I hope you will sign up for the course and see that :> doesn’t behave the same as r/adapt-react-class in certain situations as per our discussion the other day 🙂#2019-01-3006:42plexusFor the next 24 hours all Lambda Island videos can be watched for free. Enjoy! https://lambdaisland.com/news/happy-birthday#2019-01-3015:29MattiasHey, grats and thanks for the gesture 🙂 I’m just getting into Clojure and happen to have a 6 hour train ride on Friday. Never used Vimeo before, is there any functionality to buffer/download videos for those disconnected moments? #2019-01-3015:47MattiasHmm. I realize now there’s a business model here, and so the question is most likely not relevant. I’m too old for these things. No offense meant 😅#2019-01-3107:02pezCongratulations and thank you! I managed to watch a few awesome vids. Your teaching is very effective. #2019-01-3108:57plexus@UCW3QKWKT download links are so far only available when you buy individual videos.#2019-01-3014:06mauricio.szaboJust published Chlorine v0.0.9 - socket REPL package for Atom editor.
In this new version, a new way of parsing Java objects and classes using reflection: this should help users that have to do lots of interop with Java, and also fixes some problems when parsing bignumbers and bigdecimals; also, this works on Clojure 1.8.0, before the introduction of datafy, so if you're using an old Clojure version, this could be useful!
One example of the visualization of Java objects is in this PR: https://github.com/mauricioszabo/atom-chlorine/pull/42.#2019-01-3014:06mauricio.szaboDiscussions on #chlorine channel 🙂#2019-01-3020:08borkdudehttps://github.com/borkdude/speculative-kaocha-plugin#2019-01-3020:12Christian Johansen👍#2019-01-3021:46hlshipio.aviso/pretty 0.1.37
https://github.com/AvisoNovate/pretty
> Sometimes, neatness counts
io.aviso/pretty is a library and Leiningen plugin that adds well formatted, readable output of Clojure exceptions.
It's pretty indispensable to the tune of 1.9 million downloads, and is integrated into the Ultra plugin as well as Boot.
This release is a cleanup, removing the totally unnecessary io.aviso.writer namespace, and switching the Leiningen plugin from relying on implicit middleware to
explicit middleware.#2019-01-3112:37temcoI have added [io.aviso/pretty "0.1.37"] to the vectors of :plugins and :dependencies of the lein project.clj, just as shown in https://ioavisopretty.readthedocs.io/en/0.1.21/lein-plugin.html, but when I lein repl, the stack-trace doesn't be redirected. How can I make it? Thanks.#2019-01-3117:11hlshipThat's an outdated version of the docs, see https://ioavisopretty.readthedocs.io/en/latest/lein-plugin.html#2019-01-3117:11hlshipI'll go give http://ReadTheDocs.org a kick to make sure latest is latest!#2019-02-0105:00temcothanks, it works by adding /inject to :middleware#2019-02-0101:48wilkerlucio[com.wsscode/pathom "2.2.9"] is out! This version has some fixes we encountered recently to calculate paths on some complex situations (where it goes from one to many and back, hard to explain but better have it working properly). This also adds p/pre-process-plugin helper. Complete changelog: https://github.com/wilkerlucio/pathom/blob/master/CHANGELOG.md#2019-02-0115:51blueberryhttps://dragan.rocks/articles/19/Deep-Learning-in-Clojure-From-Scratch-to-GPU-0-Why-Bother#2019-02-0210:49practicalli-johnI am running a study group via YouTube broadcasts, aimed at those still new to Clojure. Today at 11am (UTC, UK time) I am talking about sequences and discussing different ways to solve related 4Clojure exercises
https://www.youtube.com/watch?v=vehRrNqgVbQ
Thank you.#2019-02-0216:51Alex Miller (Clojure team)InsideClojure journal 2019.5 http://insideclojure.org/2019/02/02/journal/#2019-02-0315:51rutledgepaulvJust cut an initial release of a library that bundles some code I’ve found myself frequently recreating to connect core.async and jetty websockets. feedback welcome! https://github.com/RutledgePaulV/websocket-layer#2019-02-0321:21dchelimskycom.cognitect.aws/api-0.8.243 is released: https://groups.google.com/forum/#!topic/clojure/wzEy8tSSKF0#2019-02-0409:11eval2020A searchable archive of Slack-messages can now be found at Clojurians-Zulip: https://clojurians.zulipchat.com/#narrow/stream/180378-slack-archive
If a channel is not listed, make sure to add user zulip-mirror-bot to it (ie /invite @zulip-mirror-bot).
(For more information about Clojurians-Zulip and how it came to be: https://clojureverse.org/t/introducing-clojurians-zulip/3173 ).
Follow up chat in #community-development please.#2019-02-0410:19alexyakushevclj-async-profiler 0.3.0 is out with many new goodies. Check out the detailed post about them here: http://clojure-goes-fast.com/blog/clj-async-profiler-tips/. The profiler itself: https://github.com/clojure-goes-fast/clj-async-profiler#2019-02-0411:04robert-stuttafordman i have been itching to play with this, thanks for the reminder!#2019-02-0412:54miroMaybe this might be of interest to somebody here - I wrote a short piece on visualizing complex workflows with D3 and Reagent : https://github.com/mikub/titanoboa/wiki/Visualizing-large-workflows-using-D3,-React-and-Clojurescript#2019-02-0418:15Yehonathan SharvitInteractive demo of Clojurescript 1.10.516 new features https://blog.klipse.tech/clojure/2019/02/04/clojuscript-1.10.516.html#2019-02-0418:30hlshipcom.walmartlabs/lacinia 0.32.0
Lacinia is an open-source implementation of Facebook's GraphQL specification, in Clojure.
GraphQL is an outstanding approach to getting diverse clients and servers exchanging data cleanly and efficiently.
GitHub repo: https://github.com/walmartlabs/lacinia
Documentation: https://lacinia.readthedocs.io/en/latest/
Featured changes in 0.32.0:
- added promote-nils-to-empty-list? compile option
- deprecated com.walmartlabs.schema/coercion-failure, and allowed parse & serialized functions to throw an exception
- fixed some GraphQL schema parsing errors#2019-02-0419:49Alex Miller (Clojure team)State of Clojure 2019 results https://clojure.org/news/2019/02/04/state-of-clojure-2019#2019-02-0520:58richiardiandreaAnnouncing unbroken-promises - two macros for testing js/Promises I hope you will find it as useful as we do here 😄 https://github.com/arichiardi/unbroken-promises#2019-02-0521:20jsa-aerialHey All, I'm pleased to announce Hanami 0.8.0 https://github.com/jsa-aerial/hanami, the go to lib/(optional) framework for developing your Vega/Vega-Lite powered domain specific visualization applications. This version involves some significant refactoring to make development of client only applications both simpler and easier. Client and server side support and APIs are now even more consistent and symmetric in capabilities and resources. Some new template and substitution key capabilities are also included. In addition there is also now callback support for picture frames.#2019-02-0521:20jsa-aerialThere is loads and loads of new documentation which now covers most aspects of developing and using server and client applications and also client only applications. There is also a new example client only application https://github.com/jsa-aerial/hanami/tree/master/examples/ClientOnly#2019-02-0521:22jsa-aerialBasic feature list
• Application construction
- Page headers with instrumentation
- External instrumentation of visualizations (dropdowns, sliders, etc)
- Full hiccup/re-com "picture framing" capability for visualizations
- Shared session groups (named sessions)
- Multiple sessions per application
• Visualization abstraction
- Parameterized templates with recursive transformations
- Purely data driven - no objects, classes, methods, etc
- Completely open ended - define your own
- More general than an API while capable of arbitrary specific detail
• Document structuring
- Tabbing system for named visulization groupings
- Multiple visulizations per tab body / grouping
- Automatic grid layout
- Custom bodies#2019-02-0613:56blueberryhttps://dragan.rocks/articles/19/Deep-Learning-in-Clojure-From-Scratch-to-GPU-1-Representing-Layers-and-Connections#2019-02-0616:10rickmoynihanhttps://github.com/RickMoynihan/redef-methods
Not officially released yet — but open to feedback#2019-02-0620:32metasoarousHi everyone. Just want to announce a new release of Oz, your Simple (TM) Clojure & ClojureScript data visualization library, built on Vega-Lite & Vega. This release (version 1.5.5), is a minor release featuring:
• A bug report and fix for those of you wanting to use Oz from the Clojure CLI, thanks to @viesti :man-bowing: (related to differences in class path resolution of resources)
• Some documentation improvements, particularly as relates to Jupyter integration
Thanks for your attention, and please let me know if you have any questions or feature requests!#2019-02-0622:07metasoarousForgot to post the link 🙂 https://github.com/metasoarous/oz#2019-02-0621:07lilactownToday I'm formally announcing a library I've been working on: hx. It is a simple, easy to use library for React development in ClojureScript.
hx gives you an extremely thin-but-familiar interface to React. It includes an ergonomic Hiccup-like syntax (very similar to Reagent) and a couple of helper macros for defining React components.
With the release of React Hooks, I see a library like hx as being very desirable for many projects so that we can continue to leverage modern React features like Hooks, Suspense, Concurrent mode, and improvements to SSR that are coming in the next year.
Feedback, questions, issues, enhancements and help are all appreciated! Reach out to me here or via Github.
https://github.com/Lokeh/hx#2019-02-0621:16eccentric JIs it able to support something like react-blessed?#2019-02-0621:19lilactownit is as close to raw React as you can get, so yes#2019-02-0621:19lilactownit doesn't reference any DOM APIs at all#2019-02-0621:22eccentric JGreat! Will have to try that out 😄#2019-02-0621:57pez@U1GCL8V2B will probably want you to support preact. 😃#2019-02-0621:59lilactownI think preact has a React compat API? if so, it would just need to be provided via the "react" moniker#2019-02-0622:01mseddonYeah. No change needed with preact-compat. We can plonk that into the webview as though react has been loaded from a cdn :D#2019-02-0622:03mseddonIf there is a change needed we can pr a compatability fix upstream. Developit is a pretty awesome guy :D#2019-02-0622:04mseddon(He even follows me on github 😂)#2019-02-0622:06lilactownawesome. yeah, IMO what makes using hx tenable is the new Hooks API. if/when Preact gets Hooks support, I definitely see hx + Preact working quite well#2019-02-0622:07mseddonOh! I haven't tried hx, I will have a look, thanks!#2019-02-0622:13mseddonYou can follow the implementation of hooks here btw: https://github.com/developit/preact/issues/1247#2019-02-0710:24danielnealdefinitely very interested in a thin layer to react, not had a chance to try hx out yet but will be first on my list#2019-02-0711:05borkdudeso, hx will create react components which then can be also leveraged from reagent?#2019-02-0711:06borkdudean example of that could be useful#2019-02-0715:50lilactownit would be like using any other React component, either with :> or the other interop options#2019-02-0715:50borkduderight, cool#2019-02-0622:07metasoarousForgot to post the link 🙂 https://github.com/metasoarous/oz#2019-02-0716:43dominicmhttps://juxt.pro/blog/posts/react-hooks-raw.html I wrote this today.#2019-02-0716:56jeff.terrellThis is great! Thanks for writing and sharing it. One thing looks wrong, though. You said, "React has been inspired by Redux." Maybe you meant that React.useReducer has been inspired by Redux? Or re-frame has been inspired by Redux? But I don't think React was inspired by Redux. simple_smile#2019-02-0717:04johnawesome. Does this change the equality/diffing performance characteristics?#2019-02-0717:20johnspecifically, when using the useLense idiom, to front useState... Is there a way to recover the performance benefits of using immutable clojure data that we get wrt using reagent/om?#2019-02-0717:29dominicm@U056QFNM5 that was supposed to be read as "The React team has been inspired by Redux in creating React.useReducer". I can see why it's not being read that way though. I think your wording is an improvement, I will change it 😄#2019-02-0717:31dominicmActually, that sentence is fairly doubling anyway, so I think I can just delete the "has been inspired by" anyway.#2019-02-0717:33dominicm@U050PJ2EU There is a useMemo which is fairly similar to the tool being used for swapping React's equality checking to rely on ClojureScript's instead of React's reference checking.
I want to dig more into this though.#2019-02-0717:34dominicmhttps://reactjs.org/docs/hooks-faq.html#how-do-i-implement-shouldcomponentupdate aha, this pretty much confirms what I thought 😄#2019-02-0717:35dominicmwell, the React.memo things is new to me, so it seems like "yes, and more!" is the answer.#2019-02-0717:35dominicmuseMemo will allow you to get performance gains for local state.#2019-02-0718:30WhoNeedszZzInteresting write-up, but something really stuck out to me that I'm surprised nobody else mentioned. You stated, "In reframing the object oriented paradigm of React into a functional programming one, some complexities are introduced." React is not and never was object-oriented and has embraced the functional paradigm from the start, which is exactly what attracted me to React in the first place.
You also said that ClojureScript libraries try very hard to avoid classes. This is not a ClojureScript mentality, but straight from React and in the documentation to only use classes when you need to. The whole idea is that stateless components should be pure, which originated from React directly. The ClojureScript wrappers have the ability to create classes for those alternate cases so I'm pretty confused by your statement.#2019-02-0718:41WhoNeedszZzAlso, as you mentioned in the post this is pretty much Redux, but built-in. It doesn't make it any less confusing on how to use it properly or avoid having to write custom reducers just to use it. I have thoroughly enjoyed re-frame's approach to this by using r/atoms and simply modify it directly and atomically. This basic and tedious procedure is not necessary with atoms.#2019-02-0719:18john@U09LZR36F Well, that's awesome news!#2019-02-0719:19johnThis could be a pretty good thing#2019-02-0719:21dominicmOverall react is very functional, but classes provide state. The stateless component stuff has gone through plenty of iterations, and historically was based around classes. The method of using functions for stateless components has struggled to gain traction due to the fear that eventually they will become classes later.
The clojurescript wrappers usually fall into a couple of traps when wrapping react classes. The methods of accessing state are more obscure than those of react, and because we're in custom territory, we can't rely on as much of the documentation provided by react itself, you are obscured through layers.
Reagent has 3 forms of component, react is pushing for hooks to be the primary component form, so that would be 1 form to achieve the same job. That's the kind of win I'm celebrating here. I don't think reagent could have taken a different path, I just think the new place we're in is better.#2019-02-0719:21john@U050B88UR dominicm is looking into reference equality for react hooks. Sweet thread above ^#2019-02-0719:23dominicmRegarding state, you're right. I expect a library to jump in and fulfil this need. I was trying to show the primitives that can be used. hx by @U4YGF4NGM has some hooks which are in this area, and I think they're really exciting.#2019-02-0719:26john@UAFT1B7Q8 React is not and never was object-oriented and has embraced the functional paradigm from the start, which is exactly what attracted me to React in the first place.
@U09LZR36F was referring to the class-ful object-oriented-ness of react. They did buy into classes early in, which is a pain in the ass.#2019-02-0719:27lilactownReact is fairly object-oriented in its concept. The whole idea of a component instance is inherently object oriented#2019-02-0719:28lilactownthe tag-line v = f(state) idea is nicely functional, but the reality React is much more than that#2019-02-0719:28lilactowneven looking at reagent, no one would call that pure FP; you have all these implicit side effects happening in your functions!#2019-02-0719:29lilactownthe fact that you can use functions or classes is really just sugar#2019-02-0719:29johnyeah... But hooks are still somewhat in the same boat#2019-02-0719:29lilactowntotally agree.#2019-02-0719:29johnjust cleaner#2019-02-0719:32lilactownanyway, https://github.com/Lokeh/hx/ provides some custom hooks like <-state which returns an atom that will update your component on swap!/`reset!`, and <-deref which allows you to use global atoms similarly#2019-02-0719:35johnYeah, I'm pretty stoked about hx!#2019-02-0719:50WhoNeedszZz@U4YGF4NGM You're mixing up two different "object-oriented" meanings. Instances are not true object-orientation, but are what languages like Java call "object-oriented". Also, just because there are stateful components that does not make it object-oriented. As any functional language, library, or framework documentation will tell you, it's impossible to be 100% pure. That's just a reality due to the way the universe works and does not make it any less functional. The functional paradigm is an entire methodology and you're just looking at a part of an aspect of it.#2019-02-0719:52lilactownI think you might be thinking in the Java-ism that OOP = classes#2019-02-0719:53WhoNeedszZzI'm not talking about OOP at all. You guys brought that into the discussion#2019-02-0720:00lilactownah OK, above you were commenting on the use of OOP in the article so that's what I was replying to.
I may be wrong, but I think of OOP as constructing an application out of a graph of state-ful things that talk to each other. in that way, I think that React is nicely OOP.
but so are most Clojure applications, and any kind of complex system (see: "microservices"). The reason I like Clojure so much is because it doesn't balk at that fact.
I agree with you that React itself has done an amazing job of embracing FP idioms and ergonomics in the small. But at some point in the large, you want something other than just functions and values I think 😅 which React provides as well.
I think that many CLJS wrappers try and paper over this OO in the large that React provides (see: Quiescent) and run into issues because of it.#2019-02-0720:04lilactownat least now, React has a blessed way of eschewing classes with something a bit more formal than reagent's form-2/form-3 or rum's mixins.#2019-02-0720:15WhoNeedszZzSo Rich's infamous talk, "The Language of the System" is perfectly fitting for what I was responding to regarding OOP.#2019-02-0720:49metasoarousHello again; Just wanted to mention that @tothda found a bug using Oz from the IClojure docker image, due to JVM version issues with a dependency. This has now been fixed in [metasoarous/oz "1.5.6"]. Thanks again!
https://github.com/metasoarous/oz#2019-02-0723:22borkdudeA new release (v0.0.3) of speculative, a collection of specs for the functions clojure.core.
https://cljdoc.org/d/speculative/speculative/0.0.3/doc/readme
Changes: https://github.com/borkdude/speculative/blob/master/CHANGELOG.md#003#2019-02-0809:42borkdudeThe speculative kaocha plugin is now available on clojars:
https://clojars.org/speculative/kaocha-plugin#2019-02-0820:13dchelimsky[ANN] Cognitect Labs' aws-api 0.8.253 is now available! https://groups.google.com/forum/#!topic/clojure/T2DxXK8qTDU#2019-02-0909:09practicalli-johnClojure study group today at 11am UK time (UTC), covering functional composition and the comp function.
https://www.youtube.com/watch?v=dhGAXISqra8#2019-02-1110:21blueberryhttps://dragan.rocks/articles/19/Deep-Learning-in-Clojure-From-Scratch-to-GPU-2-Bias-and-Activation-Function#2019-02-1319:03leonoelinjure, a dependency injector for clojure and clojurescript.
https://github.com/leonoel/injure
follow-up on clojureverse
https://clojureverse.org/t/injure-v1/3768#2019-02-1322:03tony.kayFulcro Incubator 0.0.28 is up on Clojars. This version adds a few tweaks to the dynamic router and better support for load/remoting within UI state machines.
https://github.com/fulcrologic/fulcro-incubator#2019-02-1410:58blueberryhttps://dragan.rocks/articles/19/Deep-Learning-in-Clojure-From-Scratch-to-GPU-3-Fully-Connected-Inference-Layers#2019-02-1504:29Alex Miller (Clojure team)hey all, not really an announcement but there have been at least 4 reports in different channels today of significant performance degradation on the latest Java 8 builds (u201 or 202) and Java 11 builds on both Linux and Mac. I am on the hunt for an easy repro case of the shape: 1) git clone FOO 2) run command BAR. If you have that, or have other relevant info, please drop it in #clojure-dev. Thanks!#2019-02-1511:58souenzzoI reported it some time ago in #off-topic
It's something related to load many deps/namespaces
ATM I'm just using a old version of java. 11.0.1 / 1.8.0_192#2019-02-1513:44Alex Miller (Clojure team)If it’s an older version, then I think it’s something different#2019-02-1517:15Lennart BuitAre you still looking for info on this? A coworker downgraded from java 8u202 to java 8u192 because of performance degradations on a Fulcro app. If you need more info I can try to persuade him some more to post ^^#2019-02-1517:27Alex Miller (Clojure team)no, I have enough info. am deep in analysis. thanks...#2019-02-1517:33Lennart BuitBest of luck then!#2019-02-1814:24souenzzo🙂
https://dev.clojure.org/jira/browse/CLJ-2484#2019-02-1906:11ltsampros'#2019-02-1801:46lincpaMarkdown Literary Programming that don't break the syntax of any programming language.
https://clojureverse.org/t/idea-markdown-literary-programming-that-dont-break-the-syntax-of-any-programming-language/3788#2019-02-1815:10blueberryhttps://dragan.rocks/articles/19/Deep-Learning-in-Clojure-From-Scratch-to-GPU-4-Increasing-Performance-with-Batch-Processing#2019-02-1920:47Shantanu KumarI've released Promenade 0.7.1 (elegant error handling and more) to Clojars with a fix to allow recur at tail position: https://github.com/kumarshantanu/promenade#2019-02-2006:39Yehonathan SharvitAn interactive re-frame tutorial
https://blog.klipse.tech/clojure/2019/02/17/reframe-tutorial.html#2019-02-2111:54vemvIt takes quite some head scratching to make the Reloaded workflow avoid a variety of pitfalls. I've observed that we Clojure programmers keep encountering these, so I decided to share some knowledge in this tiny repo:
https://github.com/reducecombine/rehardened
Maybe the single most valuable thing is the snippets, which I've improved continuously over the last months. PRs with further advice are absolutely welcome!#2019-02-2215:15rickmoynihanThis covers most cases I’ve seen… and hints at a few I haven’t…
Is it possible to explain each and every important line in those snippets somewhere?#2019-02-2116:42blueberryhttps://dragan.rocks/articles/19/Deep-Learning-in-Clojure-From-Scratch-to-GPU-5-Sharing-Memory#2019-02-2119:04wilkerlucio[com.wsscode.pathom "2.2.10"] is out! This version adds supports for custom user context on connect mutations (more info: https://wilkerlucio.github.io/pathom/#_mutation_output_context). Also fixes issues with elide-not-found that was compromising fulcro tempids. Full change list https://github.com/wilkerlucio/pathom/blob/master/CHANGELOG.md#2019-02-2119:42seancorfield{org.clojure/java.jdbc {:mvn/version "0.7.9"}} just landed in Maven Central. It contains a couple of tweaks around insert-multi! and highly experimental datafy/`nav` functionality (for Clojure 1.10). See https://github.com/clojure/java.jdbc/blob/master/CHANGES.md for more details. All follow-up to #sql please!#2019-02-2122:52tony.kayFulcro 2.8.2 on clojars. Minor bug fixes. See CHANGELOG for details.
https://github.com/fulcrologic/fulcro/#2019-02-2314:13pachydermballetI need a dynamically sized collection of agents, but the size of that collection will be managed by another agent (changes to the size of the collection will be significantly less frequent than changes to the underlying agents). Is nesting agents in this case appropriate, or am I missing a better way to structure this?#2019-02-2314:29eggsyntaxHi! Will you please move your comment to #clojure? #announcements is reserved for announcements, and sends notifications to a huge number of people.
No particular insight on your question, by the way, I haven't done much with agents.#2019-02-2314:38pachydermballetsorry - new to the slack client - didn't realise it was in the wrong forum#2019-02-2314:39eggsyntaxNo stress! Thanks for moving it :-)#2019-02-2418:15kwladykahttps://github.com/kwladyka/form-validator-cljs
Library update. Added checkbox validation for checkbox which have value and which haven’t. For example “accept terms”.#2019-02-2419:56kwladykaIf somebody is interested in, this is my todo:
- autocomplete for web browser
- auto fill for web browser
^ both have issues to detect events depend on Chrome / Safari / Firefox etc. It is not directly about validations, but it is common issue to provide data for validation.
- multiselect
- improve tutorial#2019-02-2508:34vlaaadcljfx 1.0.0 — declarative, functional and extensible wrapper for JavaFX inspired by better parts of react and re-frame
https://github.com/cljfx/cljfx
Follow-up in #cljfx#2019-02-2518:57eccentric JGreat job :thumbsup: I’m working on a similar project for terminal-user-interfaces I’m launching this week as well 😄#2019-02-2519:33eccentric JAlso, per the discussion https://clojurians.slack.com/archives/C03RZGPG3/p1551114866154600 could you please create a #cljfx channel to discuss this project?#2019-02-2522:02vlaaadCreated #cljfx for discussions regarding cljfx#2019-02-2510:02jumarI've just published the first episode of the Clojure Quips screencast - very short Clojure videos: https://curiousprogrammer.net/2019/02/25/new-clojure-quips-screencast/#2019-02-2614:29eccentric JReleased cljs-tui lein template 0.1.0 https://github.com/eccentric-j/cljs-tui-template. A leiningen ClojureScript template to create rich terminal-user-interface apps. Development process detailed in https://eccentric-j.com/blog/5-announcing-cljs-tui-template.html.#2019-02-2614:30eccentric JI can answer questions or provide support in the zulip topic https://clojurians.zulipchat.com/#narrow/stream/151168-clojure/topic/cljs-tui-template or in #cljs-tui on Slack.#2019-02-2618:45iarenazamagnet/pubsub 0.3.1 https://github.com/magnetcoop/pubsub -- An opinionated Duct library that provides Integrant keys for publishing and subscribing to messages using MQTT or AMQP.#2019-02-2620:11ikitommi[metosin/spec-tools "0.9.0"] is out, https://cljdoc.org/d/metosin/spec-tools: lots of improvements to coercion, a non-validating select-spec and better documentation via #cljdoc. Big thanks to all the contributors!#2019-02-2816:44blueberryhttps://dragan.rocks/articles/19/Deep-Learning-in-Clojure-From-Scratch-to-GPU-6-CUDA-and-OpenCL#2019-02-2817:31chrisnWe wrote a blogpost about our exploration into isomorphic rendering (clojurescript, reframe):
http://techascent.com/blog/isomorphic-rendering.html#2019-02-2817:58chrisnAlso, we completed another major research project and have some results. We took a kaggle kernel and with a lot of help from great people in the clojure community built out a version of it in clojure. We developed an ETL language to help with this that is similar to pandas. You can backtrack from the example to the libraries and all the documentation around all of this. We were able to get a clojupyter notebook working with oz visualizations. We plan to expand from this base to Apache Arrow and intel DAAL.
https://github.com/cnuernber/ames-house-prices/blob/master/ames-housing-prices-clojure.md
Livejournal version by Alan Marazzi
https://nextjournal.com/alan/tech-dataset-getting-started#2019-03-0104:20johnchrepl https://chrome.google.com/webstore/detail/chrepl/ablpgchfbbfachdiakmieocbdgflgfjj
A Chrome extension that injects a ClojureScript Figwheel repl into arbitrary webpages
Website: https://chrepl.app/
Pricing: $3/month per seat, free for non-commercial / open source development (more details on revenue sharing to come)
Example project: https://github.com/johnmn3/chrepl-example
Roadmap: smooth existing experience; allow connection from more tools; convert tampermonkey scripts that users can use, change and share; build browser testing tools for testing against live sites
Forums: here at #chrepl, on zulip at https://clojurians.zulipchat.com/#narrow/stream/187685-chrepl and on clojureverse at https://clojureverse.org/t/chrepl-a-chrome-extension-that-injects-a-clojurescript-figwheel-repl-into-arbitrary-webpages/3899#2019-03-0110:16pezI fail to inject when I try it:
GET net::ERR_CONNECTION_REFUSED
load @ content.js:10
load_all @ content.js:12
(anonymous) @ content.js:23
#2019-03-0113:27john@U0ETXRFEW Hey thanks for giving it a spin! Did you setup a compatible figwheel project yet? Head on over to #chrepl for further discussion.#2019-03-0121:01dchelimskyCognitect Labs' aws-api 0.8.273 is now available: https://groups.google.com/forum/#!topic/clojure/PgnJxiam_qk#2019-03-0408:07vlaaadCljfx 1.1.0 is released.
Cljfx is a declarative, functional and extensible wrapper for JavaFX inspired by better parts of react and re-frame.
In this version I added a straightforward way to extend existing components so if you find some missing part, you can easily fill it yourself.
Follow-up in #cljfx
https://github.com/cljfx/cljfx/blob/master/CHANGELOG.md#110---2019-03-03#2019-03-0516:56borkdudehttps://github.com/borkdude/finitize, a tiny library to limit and realize infinite seqs#2019-03-0517:42eccentric Jbook-report - Released 0.1.1 https://github.com/eccentric-j/book-report
- Fixed bug when formatting multi-line text#2019-03-0521:36podviaznikovthis looks super nice. Clean API and nice visual output!#2019-03-0523:40eccentric JThanks @U050K462N that means a lot!#2019-03-0600:58clj-daveI just released https://github.com/ElChache/formulario, a very simple library to make it easier to deal with forms in re-frame#2019-03-2621:59lilactownhx version 0.4.0 has been released! This is a major change and has a number of improvements:
- Local state hook <-state now returns a tuple [value set-value] instead of an atom-like value
- The hiccup parser hx.hiccup has been completely decoupled from React and made cross-platform
- DX improvements like prettier display names and helper syntax for using higher-order components
- Numerous bug fixes
- Lots of tests
Check out the full changelog here: https://github.com/Lokeh/hx/blob/master/CHANGELOG.md#040---mar-26-2019
Thanks to @orestis @mhuebert @roman01la @djebbz for the help! More to come soon 😄#2019-03-2706:51henrikCool! This looks interesting. What's the value proposition for using hooks in cljs?#2019-03-2708:34orestisThe promise that when concurrent React lands, you will get it “for free”, including prioritizing and canceling renders. Whereas with the current CLJS approaches (and with most/all other JS state management frameworks, to be fair) React doesn’t have the context to be nimble about updates. #2019-03-2708:35orestisAt the same time, hx takes an opinionated approach of using plain React components everywhere. So you could in theory hook it up with existing state management solutions. #2019-03-2708:37orestisIt’s early days, hooks look very promising but I expect things will be more stable and production ready in a few months time. #2019-03-2708:44orestisOh, forgot to mention - hooks allow you to do almost everything that class components provide (all the lifecycle methods) from functional components - in a way that’s actually reusable. So that’s a huge plus in my book. #2019-03-2708:51metasoarousGreetings!
I'm happy to announce an exciting new feature of Oz: Live code reloading for Clojure.
This idea was inspired by a talk on data science in Clojure by @aria42. In the talk Aria mused about what it might be like to bridge the divide between REPL, editor and notebook with a Fighweel-like hot-code reloading experience. This idea intrigued me and so I decided to take a stab at it.
What came from this is a function oz.core/live-reload! which takes a filename and initiates a watch routine. When the file changes, Oz reruns starting from the first changed code-form in the file (ignoring whitespace). This simple strategy allows for a tight feedback loop, even with code which periodically takes a while to fetch or process data.
This functionality (as well as a bunch of updates to Oz's core data visualization utilities) is available on [metasoarous/oz "1.6.0-alpha1"] (expect alpha2 out shortly as well, with the latest Vega updates). Please let me know what you think, and where you might see this being useful.
https://github.com/metasoarous/oz#2019-03-2708:51metasoarousIf you're interested in seeing a brief demonstration of this functionality, please take a look at the short screencast I put together:
https://www.youtube.com/watch?v=yUTxm29fjT4#2019-03-2717:58metasoarousQuick update: [metasoarous/oz "1.6.0-alpha2"] is now out, with the latest Vega libraries, as promised. Hope you enjoy. Thanks!#2019-03-2720:31luposlipSimple library to utilize huge JSON database files (`.ndjson`) as read-only database with next to no memory impact:
https://github.com/luposlip/ndjson-db#2019-03-2810:15borkdudeI wonder if I can use this as a replacement for writing and reading EDN files, since I’m having performance issues with big ones.#2019-03-2810:17borkdudeWill this still read and deserialize the entire JSON file each time you do a query?#2019-03-2810:19borkdudeAh, so it will index the start and end of each json object and only read that when you query. Clever.#2019-03-2810:19borkdudeSo it’s optimized for reads.#2019-03-2810:38luposlipExactly. But could easily be extended to support lots of other file formats. You're welcome to submit PR's if you want, otherwise I'll probably do it myself some weekend soon 🙂#2019-08-0117:24Noah Bogart> They are not a formal syntax in the language wich you can just look up.#2019-08-0117:50Noah Bogartthis is a fantastic article#2019-08-0309:05euccastroit's nice, thanks! I have little JS background and I can't see where you explain why things are being done like that instead of in the traditional 'pseudoclassical instantiation pattern'#2019-08-0320:24athomasoriginalThat’s a good point.
The reason I did not specifically address that is because my answer would be based on inference rather than providing the actual reason as to why the Reagent team went the route they did.
I actually went so far as to replace the create-class implementation with the traditional pseudoclassical instantiation pattern I specified in the blog post and Reagent seemed to continue to work as is and the tests continued to pass 🤷
So based on this the best I can do is say: maybe there was/is a technical reason (google closure compiler related?)? or perhaps their implementation just worked so they went with it?
Either way, I will address this in the footnotes.#2019-07-3015:49potapenkoAWS API Bindings with Docs
https://github.com/clojure-interop/aws-api#2019-07-3021:02timgilbertLooks cool! It might be good to add a brief note in your README about how this compares to amazonica or Cognitect's aws-api library.#2019-08-0118:18tanzoniteblackis the code that you used to generate this available somewhere?#2019-07-3015:50potapenkoGoogle Cloud Clients API Bindings with Docs
https://github.com/clojure-interop/google-cloud-clients#2019-07-3017:08cddrWe just made a new release for jackdaw
A Clojure library for the Apache Kafka distributed streaming platform.
https://github.com/FundingCircle/jackdaw/releases/tag/0.6.7#2019-07-3023:12dmaiocchiDoghub is out ! stalebot for GitHub V:0.0.1 https://github.com/MalloZup/doghub#2019-07-3119:19borkdudeclj-kondo v2019.07.31-alpha ✨
This version includes the ability to output analysis data which allows building custom linters and tools. Happy hacking!
https://github.com/borkdude/clj-kondo/releases/tag/v2019.07.31-alpha
follow up in #clj-kondo#2019-08-0118:57Ivan Fedorovpage-renderer-0.4.0-alpha is out
Adds experimental simplistic service-worker generation using Workbox script. Adds api namespace. Plus a few other minor improvements. Nitpicks, ideas, critique welcome.
https://github.com/spacegangster/page-renderer#2019-08-0202:13greglook📣 cljfmt 0.8.1
https://github.com/greglook/cljfmt/releases/tag/0.8.1
I forked the original weavejester/cljfmt a while ago to add additional functionality and style rules. This release includes a native-image compiled binary tool - it’s extremely fast and configurable outside of leiningen projects.#2019-08-0214:11aviThat’s compelling, I will check it out — thanks!
One thought: if you’re going to be making releases, and announcing them, perhaps give it a new name?#2019-08-0304:25greglookYeah, I was thinking it might be time for that since it’s effectively a rewrite at this point. cljfmt is such a compelling name, though!#2019-08-0414:51klausharbokharbo [5:25 PM]
An alpha release of Clojupyter-0.2.3 is now available on Github (branch: release/0.2.3alpha1), Clojars, and Anaconda Cloud.
Highlights from Changelog.md:
- Add support for conda install of Clojupyter supporting installs on Linux, MacOS, and Windows - if you have Anaconda, all you have to do is ‘conda install -c simplect clojupyter’
- Add support for using Clojupyter as a library where resulting standalone jar knows how to install itself as a Jupyter kernel (similar to lein-jupyter, but without depending on Leiningen)
- Improve and extend command line interface for managing installed kernels
Reports of experiences with the release - positive or negative - are much appreciated. Please report to the Clojupyter issue list.
-Klaus.#2019-08-0419:30borkdudeNew release of jet, a command line tool to transform between JSON, EDN and Transit
https://github.com/borkdude/jet/releases/tag/v0.0.4
New feature: queries.
Update: v0.0.5 is now also released with a few updates to the query language.#2019-08-0516:02Alex Miller (Clojure team)Questions on https://ask.clojure.org now get tweeted at https://twitter.com/askclojure, so follow that if you like. There are a bunch of rss feeds on the ask site too, let me know if you need a link for some other aggregation purpose.#2019-08-0516:15akondit looks very much like stack overflow#2019-08-0517:21Alex Miller (Clojure team)yes, similar in some ways. fyi, better to move any discussion to #clojure rather than here...#2019-08-0713:48plexusNew blog post: Advice to My Younger Self https://lambdaisland.com/blog/2019-08-07-advice-to-younger-self#2019-08-0716:42dorabTo your point about Study the Great Traditions, see also https://en.wikipedia.org/wiki/Lindy_effect which says that ideas that have been around for a longer time are likely to stay around for a longer time.#2019-08-0720:06dmaiocchiI have commented the twit in the same way with lindy#2019-08-0720:06dmaiocchi😁 clj#2019-08-0719:42borkdudesorry to spam you again, this will probably be the last one this week:
jet v0.0.7 is out, shipping an interactive shell for data exploration using jet-lang
https://github.com/borkdude/jet/releases/tag/v0.0.7
follow up in #jet#2019-08-0722:50seancorfieldhttps://corfield.org/blog/2019/08/07/releases/ -- new (minor) releases of clj-time, jkk/honeysql, seancorfield/clj-new, seancorfield/depstar, and seancorfield/next.jdbc -- follow-up to #clojure #honeysql #tools-deps #tools-deps and #sql respectively!#2019-08-0723:40danielcomptonExcited to announce Clojurists Together is funding Shadow CLJS, CIDER, Calva, and Meander $9k each over the next 3 months - https://www.clojuriststogether.org/news/q3-2019-funding-announcement/#2019-08-0817:33Faisal HasnainOpen-source Hacker News Reader built using ClojureScript & Re-frame cljs Any feedback/contributions are most welcome 🙂
https://hackernews-app.netlify.com#2019-08-0821:50vemvnice one, with pretty sweet readability!#2019-08-0821:51Faisal Hasnainthanks alot 😊#2019-08-0821:54vemvheads up: if I'm in the middle of a comment thread, it can be hard to tell if I'm looking at a root or leave node#2019-08-0821:59Faisal Hasnainyeah, nested comments can easily become messy, do u have any ideas to simplify the nested comments and make them readable. it definitely requires some serious thought.#2019-08-0821:59Faisal HasnainI only added left margin to reflect nesting level#2019-08-0822:13vemv#2019-08-0822:13vemvI think this color difference as HN does would cut it
or a single line 🙂#2019-08-1318:19Faisal Hasnaincolor difference is available on my reader as well. i think, i have not clearly understood what you mean?#2019-08-1318:19Faisal Hasnain> looking at a root or leave node
Nesting does not help that to distinguish?#2019-08-1318:30vemv> . i think, i have not clearly understood what you mean?
I mean, in my screenshot there's a white zone and a beige zone. that helps me identifying the root nodes.
> Nesting does not help that to distinguish?
up to a point 🙂#2019-08-1318:32Faisal HasnainI have also used colors.#2019-08-1318:33Faisal Hasnainhere on left, you see appended extra white space for nested comments, to distinguish root vs leaf nodes#2019-08-1318:33Faisal Hasnainor you mean something else?#2019-08-1318:40vemv#2019-08-1318:40vemvHere, how do you know the Slightly off topic but (nearly) two years ago my father had a bad stoke. comment is a root comment? it could be a child of a larger comment#2019-08-1318:50Faisal Hasnainyeah, now i get that. yeah, on larger screen its adding extra space on both side, so making it hard to distinguish between these two.#2019-08-1318:54Faisal Hasnainso i have two ideas, one is to to move the root comments to extreme left to, and other idea is to show slightly different color for root comments. what do you say? i lean to former than later#2019-08-1319:09vemvpersonally I like how HN does it. which is similar to how Soundcloud (a more modern example) does it#2019-08-1319:16Faisal Hasnaini have pushed an update, refresh now and let me know does it solve the problem?#2019-08-1319:18vemvchecked, seems to do the job! 🍻#2019-08-1319:19Faisal Hasnain#2019-08-1319:19Faisal Hasnainthanks for your feedback 🤝#2019-08-1319:22vemvbtw, vertical whitespace seems quite condensed#2019-08-1319:22vemv#2019-08-1319:23vemv#2019-08-1319:23vemv(I'm open to be convinced) only stands out in the original#2019-08-1319:24Faisal Hasnainurl?#2019-08-1319:25vemvhttps://news.ycombinator.com/item?id=20687542#2019-08-1319:29Faisal Hasnaini mean share url from hacker-news app#2019-08-1319:31vemvhttps://hackernews-app.netlify.com/top/20686945#2019-08-1319:35Faisal Hasnaini am using hnpwa api which give pre generated html#2019-08-1319:35Faisal Hasnaini am not doing any custom styling#2019-08-1319:37Faisal Hasnaini think it appears same as on HN, only line spacing might be little bit different#2019-08-1319:37Faisal Hasnainor you mean to point something else? 🙂#2019-08-1319:43vemvadding this rule seems to make both screenshots more similar#2019-08-1319:43vemv#2019-08-1319:49Faisal HasnainGot it 👍 Will apply fix soon#2019-08-1409:34Faisal Hasnainpushed the fix 🎉#2019-08-1409:37vemvlooks legit to me 🤝#2019-08-1409:37Faisal HasnainThanks for feedback 🤝#2019-08-0818:48wilkerlucio[nubank/workspaces "1.0.10"] is out! This version improves the tab styles, fixing width and allowing more tabs to be visible at once. https://github.com/nubank/workspaces#2019-08-0908:29DaveThis looks super cool#2019-08-0911:57plexushttps://lambdaisland.com/blog/2019-08-09-fork-this-conference#2019-08-0912:18dmaiocchiForked and starred 😁#2019-08-0914:04borkdudebabashka: a pure, fast and (severely!) limited version of Clojure in Clojure for shell scripting.
https://github.com/borkdude/babashka#2019-08-0914:20heliosyou're on 🔥 😄#2019-08-0914:22dominicmHow does it compare to Janet?#2019-08-0914:25borkdudeI don't know janet, but this is very very minimal, I just hacked it together in an hour or so#2019-08-0914:43dominicmYou might like janet Lang#2019-08-0914:55Jivago Alves@U04V15CAJ Have you seen https://github.com/candid82/joker ? Just curious about the similarities / differences.#2019-08-0915:06borkdudejoker is much more mature and evolved#2019-08-0915:07pezSeems like you are trying to say this is very limited and in its infancy? 😎#2019-08-0916:44borkdudeyes, that's what I was saying 😎#2019-08-0918:05borkdudeadded a clarification of how this might be used:
https://github.com/borkdude/babashka#rationale#2019-08-0920:16eccentric JIs this like an alternate to closh?#2019-08-0921:27borkdudeit's not a shell, so I guess no#2019-08-0921:41borkdudeI added closh to the README now, thanks @U8WFYMFRU#2019-08-0915:16OlicalI've just released the first version of Propel https://github.com/Olical/propel it helps you start Clojure and ClojureScript REPLs with a prepl attached. Including figwheel! It's got an easy to use CLI as well as a couple of functions you can call from your own main function. It's intended to be used in conjunction with tools such as Conjure https://github.com/Olical/conjure
This example command will drop you into a node ClojureScript REPL with a prepl on a random port.
clj -Sdeps '{:deps {olical/propel {:mvn/version "1.0.0"}}}' -m propel.main -e node
#2019-08-1013:42JakubClosh 0.4.1 is out. This is a bugfix release containing fixes mostly around current working directory as well as fixing compatibility with Java 11. Grab the uberjar from the releases page and give it a try: https://github.com/dundalek/closh/releases/tag/v0.4.1#2019-08-1015:53Alex Miller (Clojure team)InsideClojure Journal 2019.22 - spec updates, tools.deps http://insideclojure.org/2019/08/10/journal/ (discussion to #clojure-spec or #tools-deps as appropriate please)#2019-08-1018:12borkdudebb 0.0.4 (a tiny version of Clojure for use in combination with bash, and maybe a gateway drug to @kloud's Closh ;-)) now has all the pure functions from Clojure
https://github.com/borkdude/babashka
follow up in #babashka#2019-08-1022:19blueberrySetting Up Neanderthal with REBL and Cursive
http://www.arachnid.co.nz/blog/neanderthalrebl#2019-08-1118:54borkdudepulled this out of babashka: https://github.com/borkdude/sci#2019-08-1320:56nonrecursivehey y’all, I wrote a blog post: Frameworks and Why (Clojure) Programmers Need Them http://flyingmachinestudios.com/programming/why-programmers-need-frameworks/#2019-08-1321:05Alex Miller (Clojure team)I had such a negative reaction to the first sentence, I can't bring myself to read it. Seems totally unnecessary.#2019-08-1321:13nonrecursivehey Alex - thank you very much for this feedback 🙂 I’ve updated the post to use more neutral language and to not sound as if I can speak for the entire clojure community. I’ll respond more on reddit to keep the convo in one place#2019-08-1321:14Alex Miller (Clojure team)thanks#2019-08-1321:15vemv> I had such a negative reaction to the first sentence,
Personally I didn't, maybe influenced by prior writing by Daniel (i.e. I know his writing is intended to be funny and lighthearted)
But I also can see how that particular sentence might catch people off-guard.#2019-08-1321:51eccentric JFrameworks that emphasize breaking things down into common data structures that I can manipulate with simple functions are great. I feel where it gets messy is when they introduce bespoke vocabulary that only reflect the author's perception of the problem they are trying to solve. That's what lost my interest in Phoenix in Elixir. It may not have classes\objects, but it also introduces extra vocabulary like Plugs which share no principles and can only be learned through extensive doc reading. What I love about a library like Ring is that I barely had to read the docs. I also don't have to think about which version of ring a handler is using because it's just a function that receives a request hash-map and returns a response hash-map.#2019-08-1400:48nopromptI think the it’s just a position is a reductionist posture that contributes little to a conversation like this. It rubs me as dismissive to the propositions being advanced without actually addressing them.#2019-08-1400:58nopromptTo be clear, the first portion of that remark is fine (with me). I’m just picking on the second cause I see it so often.#2019-08-1401:05nopromptFWIW I think a better way to frame these discussions is with respect to specific contexts. It’s not “Why” it’s “When”.#2019-08-1401:08nonrecursivethe most striking thing to me about frameworks is that they’re so successful, in the sense that they’re widely used and people make a ton of money with the products built with the frameworks#2019-08-1401:24nopromptI had a great experience with Ruby and Rails not too long ago at a Clojure/Ruby shop. Even though I’m equally proficient in both languages, I found that the process of updating application code in a Rails application was generally more efficient than a Clojure one. Personally, the value of “convention” is hard to devalue in a setting where you have to work with other people. Conventions are great for teams.#2019-08-1401:41eccentric J@U06MDAPTP I’m not quite following. What’s a reductionist posture? #2019-08-1401:50noprompt@U8WFYMFRU> it’s just a function that receives a request hash-map and returns a response hash-map
This ☝️#2019-08-1401:53eccentric J@U06MDAPTP I see, what makes it reductionist though? What bigger idea am I reducing?#2019-08-1402:05noprompt@U8WFYMFRU the structure of it. The appeal to the virtuous nature of a Ring handler being so simple because, look, it’s just these three simple bits.#2019-08-1402:26eccentric J@U06MDAPTP is that wrong? I am not suggesting frameworks are bad, I agree with the article that they shouldn’t be a dirty word. However, I do have some thoughts on what can make a framework more appealing to me. Perhaps a stronger point is that I prefer learning frameworks that apply to a lot more than itself. For instance learning Ring I learned how to setup a simple middleware pattern with composition and how to model a complex problem such as request handling, into pure, data-driven functions. That is drastically different than my ongoing 4 – 5 years with Django where most of what I learned only applies to Django itself. Some of which doesn’t even carry between versions of Django. For instance how you access headers from a Django request class instance changes between 1.11 and 2.0. In Ring, you don’t have that problem. If the community builds frameworks that play nicely with FP concepts and the principles Clojurians typically embrace, I think they may come around.#2019-08-1402:31noprompt@U8WFYMFRU I do not think it is wrong. I felt like it was misplaced in the context and that statements with a similar structure in philosophical Clojure discussions [to me] are not contributive.
I followed that up because I wanted to clarify that I thought your other remarks were fine. I mean no harm.#2019-08-1402:35nopromptI also agree that “framework” shouldn’t be a word we use pejoratively in Clojure.#2019-08-1402:40eccentric J@U06MDAPTP I don’t feel you were trying to cause harm. Was curious if I misrepresented what I was trying to say, if I said something stupid, or there was room to refine it into something more meaningful. After talking I do see your point and will be more mindful of that in the future. 😀#2019-08-1402:42noprompt@U8WFYMFRU cool. And, in your defense, I was a tad hyperbolic. 😅#2019-08-1402:57nopromptTo the topic at hand, I think another benefit of using a framework is that it often alleviates you from having to make some decisions up front. For someone that wants to build an MVP that can be huge (suspending for the moment the disasters an emphasis on an MVP can bring about). Of course, a framework isn’t the only thing that can do that right? lein new <template> can do this but I’m not talking about that. I’m talking about structural decisions and conventions.#2019-08-1403:01nopromptTake re-frame for example. At its core, its really just an event handling and state management library. We could put those bits together in a number of different ways, sure. So what? Its the conventions of re-frame which make it so useful to the community at large. It gives people an opportunity to get to the part where they can start building shit without having to hack together their own architecture while they build their application.#2019-08-1403:05nopromptAnd its that last part that really resonates with me and why I think frameworks organized around conventions are nice. I’ve now worked for 4 companies seriously using Clojure to build both back and front end applications and I can tell you that, apart from the common libraries they use, I’ve seen many of them architected similarly but each with subtle twists. Those differences are so annoyingly common that think at this point in my Clojure career, I would love to see a framework with broad support in the community.#2019-08-1322:24borkdudebb 0.0.7 released: https://twitter.com/borkdude/status/116140284106138419
for future updates this week, look in the thread.
follow up in #babashka#2019-08-1407:00helios👍 this channel is slowly turning into #borkdude-releases 😛#2019-08-1507:37borkdudeI'll post updates in this thread to not overwhelm people.#2019-08-1507:37borkdudehttps://github.com/borkdude/babashka/releases/tag/v0.0.8#2019-08-1416:09LuSome feedback on this would be great and much appreciated 🙂#2019-08-1523:08Adam HelinsHey guys ! I have been working on some MIDI visualizations of piano music lately and it turns out Clojure is really pretty sweet for doing that sort of things. I will certainly open-source at least some parts when it becomes a bit more serious but meanwhile I would be keen to know if some of you have already attempted something similar or would be interested to provide some pre-alpha feedback. Feel free to PM me. Here is an example : https://www.youtube.com/watch?v=-R6Wwejoc80#2019-08-1603:53wilkerlucioHello people, today I like to announce a few updates on Pathom. First [com.wsscode/pathom "2.2.23"] is out! This is a highly recommended release for all users; this version fixes a few error scenarios that could get the parser stuck. You can see the full changelog at https://github.com/wilkerlucio/pathom/blob/master/CHANGELOG.md
However, there is more! I've been working on a new format for the documentation, moving from one big file to many pages. On top of that some content is changing both in organization and text. You can preview the new docs at https://wilkerlucio.github.io/pathom/v2. This version is also friendlier for collaboration; each page contains a button at the that gets you directly in Github to edit that page. So don't shy away, if you spot something wrong; I invite you to try the button and send a fix! I hope you enjoy the new format!#2019-08-1617:11hlshipcom.walmartlabs/lacinia 0.34.0
Lacinia is an open-source implementation of Facebook's GraphQL specification, in Clojure.
GraphQL is an outstanding approach to getting diverse clients and servers exchanging data cleanly and efficiently.
GitHub repo: https://github.com/walmartlabs/lacinia
Documentation: https://lacinia.readthedocs.io/en/latest/
Featured changes in 0.34.0:
- Improvements to the preview API
- Improvements to REPL-oriented development
- Other bug fixes#2019-08-1621:04borkdudejet 0.0.8 released with support for streaming: https://github.com/borkdude/jet#streaming#2019-08-1810:57borkdudebb v0.0.9: https://github.com/borkdude/babashka/releases/tag/v0.0.9
$ bb --time '(-> "." io/file .getAbsoluteFile .getParentFile .getParentFile str)'
"/Users/borkdude/dev/clojure"
bb took 2ms.
happy bashing!#2019-08-1819:17Karol Wójcikholy-lambda v0.0.7 https://github.com/FieryCod/holy-lambda/releases/tag/0.0.7
Contributions more than welcome 🙂 I found one bug especially annoying if someone is interested in helping https://github.com/FieryCod/holy-lambda/issues/12#2019-08-2008:56borkdudejet v0.0.9 is released. added the --collect option to collect multiple values from stdin into a vector.
https://github.com/borkdude/jet/releases/tag/v0.0.9
Also added an installer script:
$ bash <(curl -s )
$ echo '{:a 1}' | jet --to json
{"a":1}
#2019-08-2014:21blueberryNew Release 0.7.0
https://aiprobook.com/deep-learning-for-programmers/?release=0.7.0&src=sclojure#2019-08-2022:08mauricio.szaboJust published Chlorine, Atom package for Clojure and ClojureScript (connecting to a Socket REPL) version 0.1.11. On this version, multiple bug fixes, rendering code to more UNREPL objects, and allowing users to test experimental features too! Discussions on #chlorine channel.#2019-08-2115:59borkdudeclj-kondo v2019.08.21-alpha ✨
Support for potemkin/import-vars, contributions from people @ #heartofclojure
and more.
https://github.com/borkdude/clj-kondo/releases/tag/v2019.08.21-alpha
follow up in #clj-kondo#2019-08-2119:19welphello all! i am working on a mobile Clojure editor. i am not quite ready to release it yet, but wanted to share my progress. let me know what you think! https://colortree.app#2019-08-2119:30Joe LaneHey @UCEA616KC , happy to see you kept working on colortree since the http://clojure.mn meetup!#2019-08-2119:31Joe Lane(They like to keep replies in thread here)#2019-08-2119:31martinklepschThanks Joe 🙂#2019-08-2119:31pezI repeat what I said on Reddit: If you need a beta tester, I'd love to help with that.#2019-08-2119:31martinklepsch@UCEA616KC this looks very cool, in fact somebody excitedly showed me some videos that you posted to twitter.#2019-08-2119:33welpHey Joe, I did! That was such a great time for me!#2019-08-2119:35Joe LaneYou're always welcome back.
If you're willing to do the drive (or remote!?) we'd happily take a presentation on colortree!#2019-08-2119:35welp@U0ETXRFEW that is so awesome to hear! Thank you, I will take you up on that#2019-08-2119:36welp@U050TNB9F that's really really cool to me#2019-08-2119:39welp@U0CJ19XAM i am planning on coming to the next one!#2019-08-2121:37Joe Lane/sigh... Thanks, we usually post things on meetup.#2019-08-2120:41Alex Miller (Clojure team)clj 1.10.1.469 and tools.deps.alpha 0.7.541 are now available#2019-08-2120:41Alex Miller (Clojure team)- FIX: exclusions were not canonicalized and could fail to match and exclude
- PERF: cache Maven session and use Maven session cache
- FIX: Remove slf4j-nop as dependency of tools.deps.alpha
#2019-08-2212:07borkdudehttps://github.com/borkdude/jet/releases/tag/v0.0.10#2019-08-2218:39slipsetJust created #grokking-simplicity simplicity if anyone wants to discuss the book there.#2019-08-3111:26Jakub Holý (HolyJak)Hm, now I'm forced to progress from having bought the book to actually start reading it 😊#2019-08-2218:41nathanmarzWe've released a small open source project (authored by
@bhauman) for easily defining custom exception types in Clojure. It's also a great example of how to do explicit bytecode generation. https://github.com/redplanetlabs/defexception#2019-08-2218:44nateHey, not sure if this the right place to post this but I just wrote an article on how we're using ClojureScript to implement Google Cloud Functions, any feedback is welcome! https://medium.com/multis/serverless-email-notifications-with-google-cloud-functions-and-clojurescript-fc58dfea067#2019-08-2218:55pezI think this is a good place to tell about this. But there is also #news-and-articles , just FYI. 😍#2019-08-2219:01nateOh cool, didn't know about it, thanks 🙌#2019-08-2722:50pabloreOk I’m very interested in that color theme of yours#2019-08-3114:56nate@U7V9HE682 it's https://monokai.pro with Spectrum filter#2019-08-2313:17Suni Masunohttps://blog.cleancoder.com/uncle-bob/2019/08/22/WhyClojure.html#2019-08-2313:31StefanWise man! 🙂#2019-08-2316:05pezI love his writing style.#2019-08-2909:54MnoYay uncle Bob!#2019-08-2313:17Suni MasunoIn case we have any uncle bob fans here.#2019-08-2319:24klausharboClojupyter 0.2.3 released
Clojupyter-0.2.3 is now available on Github, Clojars, and Anaconda Cloud.
Highlights from Changelog.md:
- Add support for conda install of Clojupyter supporting installs on Linux, MacOS, and Windows - if you have Anaconda, all you have to do is conda install -c simplect clojupyter
- Add support for using Clojupyter as a library where resulting standalone jar knows how to install itself as a Jupyter kernel (similar to lein-jupyter, but without depending on Leiningen)
- Improve and extend command line interface for managing installed kernels
Reports of experiences with the release - positive or negative - are much appreciated. Please report to the Clojupyter issue list.#2019-08-2414:27plexusThe Heart of Clojure videos are now online https://www.youtube.com/playlist?list=PLhYmIiHOMWoEgJEvgkmUe8D0agxy_T2vR#2019-08-2505:41mike_ananevFork of Cambada is released.
https://github.com/mikeananev/cambada
- fixed projects build error with deps defined as :local/root.#2019-08-2608:02promesanteThe Fullstack Tutorial for GraphQL, https://www.howtographql.com/, ported from Javascript to Clojure/script:
Blog post:
https://promesante.github.io/2019/08/14/clojure_graphql_fullstack_learning_project_part_1.html
Source code GitHub repo:
https://github.com/promesante/hn-clj-pedestal-re-frame
Suggestions and corrections, more than welcome.
Hope it to be useful for anyone interested.#2019-08-2608:18gklijsWill certainly take a look, and might refer to it in my presentation at GraphQL summit.#2019-08-2608:22promesante👍#2019-08-2611:18blueberryhttps://dragan.rocks/articles/19/Fast-tensors-Clojure-sneak-peek?src=cslack#2019-08-2623:09athomasoriginalWriting clojurescript from scratch felt lonely so I wrote a little something about setting up a ClojureScript test toolchain with figwheel + cljs.test + jsdom https://betweentwoparens.com/clojurescript-test-setup#2019-08-2623:10athomasoriginalAs always, comments are most welcome :hugging_face:#2019-08-2716:07borkdudeedamame: EDN parser with location metadata and pluggable dispatch table
https://github.com/borkdude/edamame
follow up in a thread to this post.#2019-08-2716:07borkdude^ @U09LZR36F#2019-08-2716:08dominicm❤️#2019-08-2716:10Alex Miller (Clojure team)Good name :)#2019-08-2716:12dominicmBit cheesy, :drum_with_drumsticks:#2019-08-2804:47markusThis looks really cool. I imagine it would be a good library to use for making a compiler for a Clojure like language in Clojure, where it would be important to be able to give good information about the location of errors. What is the use case you had in mind?#2019-08-2806:00borkdudeThat’s exactly the use case for me. Take a look at sci: https://github.com/borkdude/sci#2019-08-2806:01borkdudeBut it can also be useful for providing error messages about EDN config files#2019-08-2806:12borkdude@U89UL6P9P sci is used in babashka which since yesterday has errors with locations: https://github.com/borkdude/babashka#2019-08-2807:54markusVery cool 🙂#2019-08-2811:21mpenetLightweight wrapper for CompletableFuture -> https://github.com/mpenet/auspex#2019-08-2812:12ikitommiComparison to promesa would be great, as it also uses CompletableFuture on the JVM.#2019-08-2812:13ikitommi(and works on cljs)#2019-08-2812:41mpenetdifferent semantics (api), no dynamic vars, default execution context differ also. I am also personally not interested in cljs compatibility.#2019-08-2812:48mpenetOtherwise they are quite similar, tbh I also didn't know promesa was using CompletableFuture. Checking the code I'd say auspex is also much less code. It's just a collection of stuff I was using per project put together with a couple of helpers.#2019-08-2812:50ikitommiSimplicity (and performance) is good. Many api flavors: manifold-like (auspex), java-like (https://github.com/worldsingles/commons), promise-like (promesa) ja quick-hack (https://github.com/metosin/porsas/blob/master/src/porsas/async.clj#L168-L190) 🙂#2019-08-2812:53mpenetyeah that's what I was doing too. Having manifold.deferred/chain and manifold.deferred/loop+recur is the real plus in auspex imho. Even tho chain is just reduction over then. CompletableFutures are quite cool#2019-08-2812:55ikitommiGood thing is that if the libraries emit CFs, you can compose them easily, without locking to a libraryX. Pick the one you like. E.g. pohjavirta has response mappings for CompletionStage so all of those libs just work with it.#2019-08-2812:55mpenetexactly#2019-08-2812:56mpenetor just copy paste the bits you like, it's little code#2019-08-2812:56ikitommi👍#2019-08-2813:50Alex Miller (Clojure team)The Clojure/conj 2019 CFP is currently open and we'd love to see some more submissions about interesting Clojure projects, or practices, or even just topics of interest to Clojure programmers. As much as being a conference about Clojure, it is also a conference about ideas. If you have any questions, feel free to ask in #clojure-conj. Submission info here: http://2019.clojure-conj.org/call-for-proposals/#2019-08-2818:56bherrmannWould be nice to hear about running clojure using graaalvm on the raspberry pi 4 - is there a place to suggest talks that attendees wold like to hear? or do I have the cart in front of the horse?#2019-09-3018:32petterik@U064X3EF3 The submit a proposal link button is broken?
This form is currently private and cannot be viewed by the public.
#2019-09-3018:33petterikOh sorry, this was a month ago.#2019-09-3018:35Alex Miller (Clojure team)yep, too late! :)#2019-08-2918:11borkdudeAdded support for SIGPIPE to babashka which allows you pass infinite colls over process boundaries:
$ bb -O '(range)' | bb -IO '(drop 10 *in*)' | bb -I '(take 2 *in*)'
(10 11)
https://github.com/borkdude/babashka/releases/tag/v0.0.13
follow up in #babashka#2019-08-3108:04Ivan FedorovLooked at execution times
https://gph.is/1nur1oW#2019-08-3003:14tony.kayFulcro 3 is well into the Beta phase. Fulcrologic consulting has ported one large app with success, and resolved a number of minor issues.
Beta 12 is on clojars
https://github.com/fulcrologic/fulcro#2019-08-3015:40Daniel Leong(Yet another) css-modules in clojurescript library I’ve been working on: https://github.com/dhleong/spade#2019-09-0122:10thelittlesipperExquisite! Well done! This library has what I felt was missing from cljs-css-modules.
I would just suggest that you add the require statement i.e. (:require [spade.core :refer [defclass ...]]) to the readme so that it's even more beginner friendly 🙂#2019-09-0312:01Daniel LeongThanks! Happy you like it! Good idea on the README as well#2019-08-3108:11Ivan Fedorovpage-renderer 0.4.0 is out of alpha. Service worker generation showing itself well. For Java 9+ users – also improves cache-busting, which is now [finally] based on hashing. For some web-apps – that could be the fastest way to mobile devices [via PWA] and laptops [via Chrome apps].
https://github.com/spacegangster/page-renderer#2019-08-3119:24borkdudebabashka v0.0.14: socket REPL!
https://github.com/borkdude/babashka/#socket-repl#2019-09-0119:32ahungryhttps://github.com/ahungry/xdg-rc#2019-09-0120:18dominicmCool, did you see directories-jvm?#2019-09-0120:18dominicmIt has Windows support for example#2019-09-0122:56ahungryI hadn't, ill look. Ty#2019-09-0121:24tony.kayFulcro 3 Beta 13 is on Clojars, and the template has been updated to ensure that Fulcro 2 does not appear on the classpath. This should make it a bit easier for beginners to keep things straight:
https://github.com/fulcrologic/fulcro-template#2019-09-0207:59schmeeAnnouncing Daguerreo, a task execution library!
> Daguerreo is a library to create workflows using tasks. It takes care of dependency resolution, parallellism, retries and timeouts and let’s you focus on your business logic. It shares the basic structure of other task execution libraries such as Airflow or Luigi, but unlike those it is meant to be embedded in your application rather than run as a standalone service.
https://github.com/schmee/daguerreo/#2019-09-0211:43kszaboAny plans to add checkpointing/handling process failures?#2019-09-0212:01schmeeNot sure what you mean by that, but I’m certainly open to feature requests/suggestions 🙂 If you’re interested, please open an issue describing what you’re looking for and maybe an example use-case! 🙏#2019-09-0212:01schmeeI guess checkpointing = restart the job from “in the middle” to avoid redoing a bunch of work?#2019-09-0212:04kszaboyes, of course for that you will need a pluggable persistent storage for checkpoints#2019-09-0212:07kszaboI looked at http://andrewberls.com/blog/post/introducing-overseer--data-pipeline-management-in-clojure-pt-1 before in this space in Clojure#2019-09-0212:08kszabothis looks like a single-process version of it, without any process-level execution guarantees (ie. if I kill the running DAG, I have to handle resuming it somehow)#2019-09-0212:12schmeecorrect, because of that it is not really suited for really long-running workflows (e.g big data-crunching jobs)#2019-09-0212:13schmeethe sweet spot for Daguerreo in it’s current state is when you have lots of smaller tasks that interact with each other in complex ways, but the overall time of the job is “short”, for some definition of short#2019-09-0212:19kszabomakes sense, beats a hardcoded AST for sure 🙂 thanks!#2019-09-0212:20kszabo> correct, because of that it is not really suited for really long-running workflows (e.g big data-crunching jobs)
but if this is intended then the comparison with Airflow and similar tools that fit this niche is unfair IMO#2019-09-0212:22schmeethe comparison is not meant to imply “Daguerreo matches the features of these libraries”, but “if you are familiar with these libraries, it will help you understand Daguerreo faster”. I’ll re-phrase it and add some more in-depth comparisons on how they differ, thanks for the feedback! :thumbsup:#2019-09-0508:32leonoelI don't quite understand why did you choose not to rely on jvm thread interruption mechanism#2019-09-0508:36leonoelif correctly implemented, blocking calls such as Thread/sleep support cancellation via Thread/interrupt, and polling is supported as well via Thread/isInterrupted#2019-09-0518:25schmee@U053XQP4S the reason is partly that I don’t want to expose users to old-school Java threading details, and partly that there are lots of libraries that don’t handle interrupts properly anyway. So my choice was to make it explicit and force the user to handle it rather than relying on a potentially shaky, more implicit solution. The current solution can also be modified to handle interrupts if I ever want to go down that road (I think :D). So that the reasoning, whether it’s good or not I’m actually not sure myself 🙂#2019-09-0518:25schmeeI’m looking forward to playing with Missionary in an upcoming project btw, it looks really cool! 🙂#2019-09-0519:16leonoelthat makes sense, however I find useful to have a way to be actively notified of cancellation (in addition to passive polling), for instance by attaching a callback to the token#2019-09-0519:19schmeeagree, that’s something I overlooked in the initial release. Would an on-complete callback suffice you think? then you can check the completion status in the callback and handle it, or hook it up to something like Manifold can work with deffereds instead#2019-09-0519:26leonoela callback looks like the most flexible solution to me, you can hook up to anything supporting cancellation, including a nested job and even Thread/interrupt#2019-09-0519:33leonoelBTW you can make it a non-breaking change if you implement it on the arity 1 of is-active? 😉#2019-09-0214:42darwinDirac v1.4.0 is out. Featuring initial Figwheel Main integration. Give it a spin:
https://github.com/binaryage/dirac/tree/master/examples/figwheel-main#2019-09-0305:06Candidjoker v0.12.7 is out: https://github.com/candid82/joker/releases/tag/v0.12.7#2019-09-0314:36plexushttps://lambdaisland.com/blog/2019-09-03-streaming-sessions-thursday-friday#2019-09-0315:38blueberryNew Release 0.8.0 sheepy
https://aiprobook.com/deep-learning-for-programmers?release=0.8.0&src=cslack#2019-09-0406:00jacekschaeClojureScript Podcast is back with Season 2 - in the first episode we are talking with @shaunlebron about lisp editing - https://clojurescriptpodcast.com/#2019-09-0506:35StefanI listened to it this morning in the car, very nice. I could actually follow the auditory explanation of the visual stuff pretty well, so well done.
I heard, I think in the context of vim/fireplace, something like “cocoon” mentioned. What is that exactly? @U8A5NMMGD#2019-09-0911:57jacekschae@shaunlebron would you have more directions when it comes to “cocoon”?#2019-09-0412:57borkdudeI'm happy to announce this new release of babashka, a scripting tool nobody asked for. Introducing conch, future and atom.
https://github.com/borkdude/babashka/releases/tag/v0.0.16
follow up in #babashka#2019-09-0418:22OlicalConjure v1.0.0 has been released! https://github.com/Olical/conjure
> Clojure (and ClojureScript) tooling for Neovim over a socket prepl connection.
Not a lot has changed since v0.25.0 but I'm finally happy with the stability and feature set of the tool. I hope it brings you many happy years of Clojure(Script) Neovim development!
There's a lot more still to come with regards to the code it self as well as the documentation surrounding how to start socket prepls with various ClojureScript scenarios.#2019-09-0504:27ahungryjust added this to clojars https://github.com/ahungry/determinism/#2019-09-0508:23viestihttps://github.com/viesti/timbre-json-appender, a JSON appender for Timbre. Makes extracting data from logs easier in for example AWS CloudWatch Logs and GCP Stackdriver Logging.#2019-09-0512:54OlicalI've just released Propel v1.1.0 which now has lein-figwheel support as well as figwheel-main https://github.com/Olical/propel executing clj -m propel.main -e lein-figwheel -w will start figwheel from your project.clj with a random prepl port that gets written to .prepl-port. Magic!#2019-09-0514:34tony.kayMore videos are now available in the Fulcro (version 3) video series on YouTube:
https://www.youtube.com/playlist?list=PLVi9lDx-4C_T7jkihlQflyqGqU4xVtsfi#2019-09-0518:57mauricio.szaboJust published Chlorine version 0.1.12. On this version some fixes, but it was mostly an urgent fix for Atom because some APIs were removed from a dependent package without any warning, so Chlorine was simply not working at all#2019-09-0519:03pezSounds absolutely horrible!#2019-09-0613:40mauricio.szaboYes, and it still is. The new API does not support all the things that I need, so there's some functionality that's now missing and it is breaking my own workflow. Still working on it to solve these issues and publish a definitive fix#2019-09-0607:11PawełJust pushed pabloware.diff - readable diff & patch lib. Best used with maps.
https://github.com/PawelStroinski/pabloware.diff#2019-09-0613:44vlaaadI made blanket: soft and plushy encapsulation library for Clojure data structures
https://github.com/vlaaad/blanket#2019-09-0614:01plexusLambda Island "office hours" live stream starting now https://www.youtube.com/watch?v=loDf8Pk4kD4#2019-09-0708:57borkdudebabashka v0.0.17. most notable new feature: add clojure.core.async! 😊
https://github.com/borkdude/babashka/releases/tag/v0.0.17
follow up in #babashka#2019-09-0719:14viestiHacked a utility for tailing GCP Stackdriver logs: https://github.com/viesti/gcp-utils#tailing-stackdriver-logs#2019-09-0821:23pezWe are readying an improvement to Calva’s Jack in and Connect functionality and would like your feedback before we release. https://clojureverse.org/t/please-help-test-does-your-project-work-with-calva-if-not-why-not/#2019-09-0907:53henrikObviously not mine, but needs to be in here: https://github.com/JetBrains/noria-clj Abstract UI reconciliation library for Clojure, Kotlin, and Rust. Could theoretically be used to implement a VDOM in in CLJS, but is currently only CLJ, not CLJC/CLJS.#2019-09-0910:37martinklepschInteresting. Would be curious how this compares to JaneStreet’s IncrementalDom and generally other prior art#2019-09-0918:19polymerisIt seems to be actually written in Kotlin, so cljs is probably not an option#2019-09-0918:20polymerisoh, wait... kotlin can target js, didn't know that#2019-09-0918:22martinklepschMight still be that the way Kotlin compiles to JS is too high-overhead to be worth it in other languages… similar to how using a library written in CLJS would come with too many “foreign” things to be attractive to JS users#2019-09-1001:02Cam SaulHey everyone. I just put together a library that ports some of the better features of CLOS to Clojure multimethods, and adds a whole lot more.
You can call the next method with next-method:
(require '[methodical.core :as m])
(m/defmulti my-multimethod
:type)
(m/defmethod my-multimethod Object
[m]
(assoc m :object? true))
(m/defmethod my-multimethod String
[m]
(next-method (assoc m :string? true)))
(my-multimethod {:type String})
;; -> {:type java.lang.String, :string? true, :object? true}
and define auxiliary methods (`:before`, :after, and :around):
(m/defmethod my-multimethod :before String
[m]
(assoc m :before? true))
(m/defmethod my-multimethod :around String
[m]
(next-method (assoc m :around? true)))
(my-multimethod {:type String})
;; -> {:type java.lang.String, :around? true, :before? true, :string? true, :object? true}
and that’s just the tip of the iceberg. Pluggable caching, support for completely custom dispatch and method combination strategies, functions for programmatically creating and composing multimethods, and a whole lot more!
https://github.com/camsaul/methodical#2019-09-1004:21gerredinspired by a conversation in #shadow-cljs, i've created the #cloud-native channel to discuss/ask questions about this latest buzzword, including all of your other favorite buzzwords such as kubernetes, docker, service meshes (including istio and linkerd!), spiffe/spire, and basically how to optimize Clojure for these environments or talk about Clojure can help us infrastructure engineers / SREs.#2019-09-1004:22gerred(i also sit on several CNCF and LF SIGs related to this, am a core contributor to Kubernetes, Helm, and other projects, and working on a Clojure Kubernetes client for operator development, so happy to spike and grow this channel)#2019-09-1014:09Zac BirWe’re trying to go all-in on CNAB, I’d love to keep abreast of what you’re working on. Joining#2019-09-1006:43ahungryI was griping in #clojure about the lack of a good way to search through the multitude of packages - clojars doesn't seem to list popularity, and searching on github for a specific lib is though#2019-09-1006:43ahungrylet me know what you all think of this: http://slugclojure.ahungry.com/#2019-09-1009:56borkdudeThat seems useful! One question: why only 700-ish results? Feedback: maybe use a slash instead of a dot between the org and the lib name?#2019-09-1011:45StefanI like it as well! Another suggestion: I always look at the projects’s description first on github. To me it would be useful to see this above the project’s README.#2019-09-1011:45StefanThis one for example.#2019-09-1012:04ahungryGood idea on the desc#2019-09-1012:05ahungryThe 700 or so more closely match the clojure toolbox site results vs an open ended query for all#2019-09-1016:49metasoarousGood stuff! This is super useful, and I've wanted something like this in the past; So thanks for putting this out there!
Now for some constructive criticism: I do however see that when I search for certain terms, items will come up which are only tangentially related. Maybe there's a way to look for term repeat, or if you're feeling really fancy, do some topic modelling to see if the content is associated with whatever term is being search for (vs mentioning off hand)? I found it even matching partial word matches for unrelated words in some cases (particularly short words), so maybe an exact match option would be helpful?#2019-09-1016:14blueberryNew Release 0.3.0 sheepysheepysheepy
https://aiprobook.com/numerical-linear-algebra-for-programmers?release=0.3.0&src=cslack#2019-09-1018:24tony.kayFulcro Beta 15 is on clojars.
This release fixes a few more minor issues and adds a bit of dropped SSR logic back.
https://github.com/fulcrologic/fulcro/#2019-09-1109:06OlicalPropel can now be used to REPL into any remote or already running prepl, not just start them! https://github.com/Olical/propel
clj -m propel.main --repl-only --port 8787
cljs.core=> (js/alert "Yay!")
#2019-09-1112:12jacekschaeIf you didn’t have a chance already check out the latest episode of ClojureScript Podcast with @stuarthalloway where we talk about Spartan REPL and Sherlock Holmes https://clojurescriptpodcast.com/#2019-09-1112:24OlicalConjure v1.1.0 tagged! neovim + clj https://github.com/Olical/conjure
Self prepling into Conjure's own JVM is much faster now, so using nvim scratch.clj in any directory should be almost comparable to executing clj to get a REPL up to try stuff out. The difference being Conjure gives you a full text editor + autocompletion etc. No setup, just install the plugin and open a Clojure file then start evaluating things 😄
Demo: https://asciinema.org/a/267614
I've also improved how paths work internally so working on JVMs within Docker containers or on other machines will still allow you to go to definition.#2019-09-1112:27dominicmHow do you docker jump like that?!#2019-09-1112:30OlicalSo it'll try to find the most specific common relative path that can be found within your CWD of Neovim. As long as your docker container is also sharing your project, even if it's under a different directory, it'll find the source.#2019-09-1112:31OlicalThings inside jar files in your .m2 will open as long as you have the dependency in the outside machine. It won't find the dep source otherwise.#2019-09-1112:31OlicalIt's trying to find the source on your local machine from information found within the remote JVM.#2019-09-1112:31dominicmGenius#2019-09-1112:31dominicmThat would be a great cider nrepl enhancement#2019-09-1112:31OlicalYep! Feel free to "borrow" it! 😄#2019-09-1112:32OlicalI was considering working up from the file name then adding on each parent, but that runs a higher risk of false positives. So I opted for removing path segments from the left, if that makes sense? Until we find a common relative path. I've also done this for when you perform an eval so the "source" file of any vars defined in your eval get a relative path that other tools should be okay with handling.#2019-09-1112:33OlicalThis doens't work in ClojureScript because I can't set the file / line an eval is taking place in. Maaaaaybe if I work out some self hosting magic I'll be able to do that. So you have to eval the entire file sometimes in CLJS to preserve meta-data for go to def.#2019-09-1112:44pezVery cool!#2019-09-1116:03tmacreightThank you so much for this! Incredible work#2019-09-1116:52OlicalYou're most welcome 😊 I hope it works well for you!#2019-09-1116:00avi📣 New release of FC4, a FLOSS framework for authoring, publishing, and maintaining C4 software architecture diagrams:
https://github.com/FundingCircle/fc4-framework/releases/tag/release_2019.09.10-c987903#2019-09-1116:00aviIf you’re wondering how this is relevant: the fc4 tool is implemented with Clojure and this release is a step towards replacing a Node+JS element of the tool with “pure” Clojure code.#2019-09-1121:51borkdudebabashka, a native clojure scripting tool just got a new release, most notably the addition of clojure.tools.cli to parse command line arguments.
https://github.com/borkdude/babashka/releases/tag/v0.0.18#2019-09-1220:29hlshipcom.walmartlabs/lacinia 0.35.0
Lacinia is an open-source implementation of Facebook's GraphQL specification, in Clojure.
GraphQL is an outstanding approach to getting diverse clients and servers exchanging data cleanly and efficiently.
GitHub repo: https://github.com/walmartlabs/lacinia
Documentation: https://lacinia.readthedocs.io/en/latest/
Featured changes in 0.35.0:
- Resolves Antlr-related issue that prevented AWS lamba deployments
- Add missing check for non-null field argument bound to missing variable#2019-09-1223:38gerredHey Atom users (though I use a lot of different editors depending on how I feel that day), I published a clj-kondo plugin for atom! https://atom.io/packages/linter-kondo 🎉#2019-09-1309:44plexushttps://clojureverse.org/t/clojurians-log-is-looking-for-help/4831#2019-09-1312:21plexusAlso a reminder to make sure @U055W814A is invited to any channel you want to see show up at https://clojurians-log.clojureverse.org#2019-09-1418:25mauricio.szaboJust published a new version of Chlorine (0.1.14), Socket REPL plug-in for the Atom editor. On this edition, a new console to render stdout, stderr, and evaluation results. There's not much on this release, but it fixes a huge problem with some workflows (mine included 😆)#2019-09-1611:56madstapI wrote a little DSL for scheduling.
For an example, triple witching hour is [#{:march :june :september :december} [3 :friday] "15:00" "America/New_York"].
It's not on clojars yet, because I didn't figure out how to deploy with deps.edn yet, but the git coords are in the readme.
https://github.com/madstap/recex/#2019-09-1612:15Christian JohansenThere is some info on deploying with deps.edn here: https://cjohansen.no/tools-deps-figwheel-main-devcards-emacs/ It's written for ClojureScript, but deployment (step 8) is the same for both.#2019-09-1711:18Adam HelinsA new library for doing all sorts of discrete event simulation !
Particularly useful for animations and games, even if you know nothing about simulation. For instance, it is a very good companion for Quil. A simple yet powerful tool.
https://github.com/dvlopt/dsim.clj#2019-09-1723:33blueberryhttps://dragan.rocks/articles/19/Common-Gotcha-Asynchronous-GPU-CUDA-Computing-Clojure#2019-09-1806:18jacekschaeThis week on ClojureScript Podcast discussion with @seancorfield about REBL - https://soundcloud.com/user-959992602/s2-e3-rebl-with-sean-corfield#2019-09-1806:40dharriganThe last one with Stuart was great listening about his "Spartan" REPL setup etc...#2019-09-1808:19vlaaadYes it was, although I feel he goes too far. Stuff like find usages, go to definition and auto-completion is immensely useful and a great time saver.#2019-09-1808:37dominicmHe has find uses in rebl, fwiw#2019-09-1808:38dominicmI'd bet he uses some kind of grep too. I wonder if his dotfiles are online?#2019-09-1808:51danielnealevery morning I get up and do 100 sit ups a hunderd press ups a hundred squat a ten k run and find usages for 100 vars#2019-09-1809:11vlaaadclojure is not greppable. try find usages of namespaced keyword :a/b when it can be ::some-ns/b, #:a{:b 1}, {:a/keys [b]}, {:keys [a/b]}, {::some-ns/keys [b]}#2019-09-1809:13vlaaadfind usages in rebl can find only runtime usages of functions to vars. can't find usages of values. can't find usages of java.#2019-09-1815:30seancorfield@U47G49KHQ He talks about why he doesn't want auto-completion on that podcast tho' -- as a "self-check" to keep his APIs small and memorizable and I get that point.#2019-09-1815:32seancorfieldAnd Clojure code is "more" greppable if you are very consistent about how you use namespaces and aliases (but, yes, destructuring makes that a bit less straightforward).#2019-09-1815:34seancorfieldWe have 90K lines of Clojure at work and don't find that particularly challenging (and our in-house "style" has certainly changed over the years, so our code isn't as consistent as it could/should be).#2019-09-1815:36vlaaadI don't have problems with keeping consistency in my own projects, but using dependencies means there will be multitude of different styles#2019-09-1815:38vlaaadand APIs of different size#2019-09-1815:39vlaaadand using java interop is idiomatic#2019-09-1815:40vlaaadI think it's a nice self-imposed constraint for a library author, but during day-to-day development I want a bit more help... which I get with cursive 🙂#2019-09-1815:43seancorfieldI use compliment for day-to-day development -- I'm not quite as austere as Stu, but I like a nice, simple toolset (e.g., a Socket REPL rather than nREPL etc).#2019-09-1815:46dominicmIt's a good reason to use simple dependencies too#2019-09-1815:55vlaaad@seancorfield do you have editor integration for compliment or do you invoke it directly?#2019-09-1815:56seancorfieldIntegrated via Chlorine (for Atom).#2019-09-1816:52dharriganThe recent podcast re: REBL is great too 🙂#2019-09-1818:08seancorfieldThanks @U11EL3P9U#2019-09-1818:12dharriganI'm encouraged to try it out again 🙂#2019-09-1818:12seancorfieldHappy to help / answer any Qs!#2019-09-1821:38timgilbertFWIW, Cursive is smart enough to find usages on all the keyword syntax variants that vlaad listed above. (I agree that plain grep / regex searching is not very useful for this purpose)#2019-09-1819:28Daw-Ran LiouEmoji for Clojure 0.1.2 released. https://github.com/dawran6/emoji#2019-09-1820:33lumpygreat job, would be more idiomatic if all keys used kebab case instead of snake case, i created a PR https://github.com/dawran6/emoji/pull/2#2019-09-1914:21wilkerlucio[com.wsscode/pathom "2.2.25"] is out! This version adds a few sugar helpers to create connect parsers with ease, also adds some new helpers to create resolvers for constant values and single attribute transitions. Also includes stability updates for the parallel parser.
You can find docs on the sugar things at: https://wilkerlucio.github.io/pathom/v2/pathom/2.2.0/sugar.html
Also there are new docs on the resolver helpers: https://wilkerlucio.github.io/pathom/v2/pathom/2.2.0/connect/resolvers.html#_resolver_builders
Full changelog: https://github.com/wilkerlucio/pathom/blob/master/CHANGELOG.md#2019-09-2003:51tony.kayFulcro 3 has passed through Beta, docs are pretty decent (mostly updated), 15-odd videos recorded, and we’ve ported a 27kloc Fulcro app. Time for RC1!
Fulcro 3.0.0-RC1 is on Clojars.
https://github.com/fulcrologic/fulcro#2019-09-2008:05blueberryNew release 0.9.0 sheepy
https://aiprobook.com/deep-learning-for-programmers?release=0.9.0&src=cslack#2019-09-2015:00kkuehnedatahike 0.2.0 released: https://lambdaforge.io/2019/09/20/datahike-release-0.2.0.html#2019-09-2018:38Daw-Ran Lioudawran6/emoji 0.1.3 released: https://github.com/dawran6/emoji
clojure
(require '[emoji.core :as e])
(e/emojify "Clojure is awesome :thumbsup:")
;; => "Clojure is awesome 👍"
(e/emojify-all "Clojure pizza fire thumbsup smile")
;; => "Clojure 🍕 🔥 👍 😄"
#2019-09-2023:20LuAdded to the form library more pre-built components:
- fancy dropdowns (BULMA framework)
- normal dropdowns
https://github.com/luciodale/fork#2019-09-2112:44blueberryhttps://twitter.com/uncomplicateorg/status/1175384960821334016#2019-09-2221:40borkdudeclj-kondo v2019.09.22-alpha ✨
Type checking and more.
https://github.com/borkdude/clj-kondo/releases/tag/v2019.09.22-alpha
Follow up in #clj-kondo.#2019-09-2301:00curtis.summersHugSQL 0.5.0 (and followup bugfix 0.5.1)
Significant updates include:
- namespaced keywords support (Thank you Sebastian Poeplau!)
- next.jdbc adapter (Thank you Nikola Peric for the implementation and Sean Corfield for next.jdbc)
Full CHANGELOG: https://github.com/layerware/hugsql/blob/0de26acce2fc4d07f0efb51c0d08ba4ab756a708/CHANGELOG.md
Clojars: https://clojars.org/com.layerware/hugsql
Docs: https://www.hugsql.org#2019-09-2307:29borkdudeedamame, EDN parser with location metadata and pluggable dispatch table, v0.0.4
https://github.com/borkdude/edamame/releases/tag/v0.0.4#2019-09-2416:57blueberryhttps://twitter.com/draganrocks/status/1176540540868988933#2019-09-2419:47mauricio.szaboJust published Chlorine v0.2.0, socket REPL integration for Atom. Lots of things in this new version: autocomplete both with and without Compliment for Clojure and ClojureScript (Shadow-CLJS only for now), some stability fixes, and the ability to decide which shadow-cljs target to use. Discussions on #chlorine channel 🙂#2019-09-2506:43jacekschaeThis week on https://clojurescriptpodcast.com discussion with @jr0cket
and how to setup spacemacs
for ClojureScript and Clojure development#2019-09-2521:43madstapReleased https://github.com/madstap/recex/ version 0.1.0 on clojars.
recex is a small DSL for generating recurring times.
New in this version: cron->recex#2019-09-2617:54tony.kayThe official release of Fulcro 3 is now on clojars.
https://github.com/fulcrologic/fulcro/#2019-09-2623:24mauricio.szaboJust published Chlorine v0.2.2, socket REPL integration for Atom, fixing some issues (exceptions now show the real problem of a crash, and also a nasty bug with autocomplete that was force-closing the editor). Discussions on #chlorine channel 🙂#2019-09-2803:15seancorfieldseancorfield/next.jdbc {:mvn/version "1.0.8"} -- Adds :jdbcUrl + options variant db-spec; next.jdbc.specs/unstrument (thanks @gerred); documents HugSQL next.jdbc adapter + other doc improvements -- https://github.com/seancorfield/next-jdbc/releases/tag/v1.0.8 -- follow-up in #sql and/or #hugsql as appropriate#2019-09-2803:18tony.kayI’ve released some more videos in the Fulcro tutorial series. New ones include some dynamic UI built with data and some coverage of UI State Machines.
https://www.youtube.com/playlist?list=PLVi9lDx-4C_T7jkihlQflyqGqU4xVtsfi#2019-09-3001:32athomasoriginalFinally got around to solving a 2 year old bug in a project from the early days of my Clojure learning journey https://betweentwoparens.com/students-of-the-game-reloadable-code#2019-09-3014:57leonoelFirst release of clope, a byte rope implementation for clojure and clojurescript.
https://github.com/leonoel/clope#2019-09-3015:25paul ai have some cljs code where i store about 2 MB in a Uint8Array. i update some values in the byte array (no shortening or lengthening it) and then return it. is clope up my alley?#2019-09-3016:17leonoel@UN0TDQ30T maybe, depending on your use case and performance requirements. the right way to update a portion of an immutable rope is to extract a subrope of the portion you want to update, copy it to a new buffer, mutate the buffer, wrap it in a new rope and finally join it with the unmodified subropes before and after. All these operations should be reasonably fast.#2019-09-3016:17paul ai see, thanks!#2019-09-3016:18leonoelmutate the underlying array in-place is at best hackish as it will break internal hashcode caching#2019-09-3020:21andy.fingerhutVersion 0.1.0 of the core.rrb-vector library has been released, with fixes for several bugs found in earlier releases. https://github.com/clojure/core.rrb-vector . Change log: https://github.com/clojure/core.rrb-vector/blob/master/CHANGES.md#2019-10-0101:45plexusKaocha 0.0-549 is out, with support for Aero's #profile reader tags. https://cljdoc.org/d/lambdaisland/kaocha/0.0-549/doc/3-configuration#profiles#2019-10-0109:47plexusMake that 0.0-554, I had to fix a regression.#2019-10-0109:47plexuscomments/questions/discussions can go to #kaocha#2019-10-0116:29niwinzpromesa-4.0.0 has been released. Release focused on performance and consistency/usability improvements: Changelog: https://github.com/funcool/promesa/blob/master/CHANGELOG.md#version-400#2019-10-0206:11jacekschaeAre you into VSCode? Check out this week episode and how you can set it up for Clojure and ClojureScript development with @pez Peter Strömberg https://soundcloud.com/user-959992602/s2-e5-vscode-setup-with-peter-stromberg#2019-10-0222:21wcohenfactual/geo 3.0.0
- Primary new features are 1) use of the now-incubated locationtech release of proj4j and 2) the allowed use of externally created CoordinateTransforms to reproject multiple features more performantly.
https://github.com/Factual/geo/blob/master/CHANGELOG.md
Also, based on geo, two new geospatial libraries in development, with initial alpha releases planned soon:
https://github.com/willcohen/ovid
- a Featurelike protocol that includes additional attribute properties alongside a geometry based on geo's Shapelike, allows interoperability between feature maps and pure Shapelike, and enables reading/writing GIS file types (preliminary support for reading .shp geometries is present, with .dbf and .prj in development)
https://github.com/willcohen/aurelius
- uses ovid's Featurelike to enable transducible/composable functions operating on both geometries and features#2019-10-0309:19borkdudeEdamame (EDN parser with location metadata and configurable dispatch table) v0.0.5
https://github.com/borkdude/edamame/releases/tag/v0.0.5#2019-10-0309:30borkdudeBabashka, a Clojure scription solution with fast startup, v0.0.19:
https://github.com/borkdude/babashka/releases/tag/v0.0.19#2019-10-0611:35borkdudebb v0.0.20 is now also released which fixes a bug when parsing the empty map.#2019-10-0320:24vlaaadThere is a minor new release of #cljfx, a functional and extensible wrapper of JavaFX inspired by better parts of react and re-frame: https://github.com/cljfx/cljfx/blob/master/CHANGELOG.md
I haven't really announced any cljfx releases in a while, but in addition to a bunch of minor fixes and improvements since previous announcement, there is a notable new feature, which is a basic declarative animation support (example: https://github.com/cljfx/cljfx/blob/master/examples/e31_indefinite_transitions.clj)#2019-10-0408:23borkdudeclj-kondo v2019.10.04-alpha: more types, unused private var linter and several bugfixes.
https://github.com/borkdude/clj-kondo/releases/tag/v2019.10.04-alpha
follow up in #clj-kondo#2019-10-0408:54Dainius JocasBeagle, a streaming search library based on Lucene Monitor, v0.3.1
https://github.com/tokenmill/beagle#2019-10-0514:07borkdudesci (Small Clojure Interpreter) is now available on NPM: https://www.npmjs.com/package/@borkdude/sci#2019-10-0516:31borkdudeYou can try it out in the browser:
https://runkit.com/embed/ad8d8oeg6dr3#2019-10-0614:21carocadhey everyone, here is a little contribution from me. A way to parse Clojure(script) code safely. I hope you like it 🙂
https://github.com/carocad/parcera#2019-10-0614:29borkdudenice!#2019-10-0614:52dominicmWhat are you using it for?#2019-10-0614:57carocad@U09LZR36F so far I am not using it. But I was hoping it would be useful to people out there wanting to parse clojure but not doing it since read-string is not safe and edn/read cannot parse clojure code. I have seen a couple of projects die out due to that so I thought I would help a little 😅#2019-10-0614:58dominicmI may try and reimplement something of mine based on this.
Is it a goal to have perfectly bidirectional snippets?#2019-10-0614:58borkduderewrite-clj has a similar goal#2019-10-0614:59borkdudehttps://github.com/borkdude/edamame is used to parse code in sci/babashka (it skips intermediate representation and parses directly to code, bidirectionality is not a goal).#2019-10-0614:59dominicmYeah, current implementation is rewrite but I found it difficult to work with for reasons you mentioned :)#2019-10-0614:59dominicm(Eg metadata)#2019-10-0614:59borkdudeuser=> (parcera/clojure "(defn foo [])")
[:code [:whitespace ""] [:list [:whitespace ""] [:symbol "defn"] [:whitespace " "] [:whitespace ""] [:symbol "foo"] [:whitespace " "] [:whitespace ""] [:vector] [:whitespace ""]] [:whitespace ""]]
I see a couple of empty whitespace nodes there.#2019-10-0615:01borkdudekudos for cljc support!#2019-10-0615:05borkdudeit seems instaparse supports .cljc. maybe parcera could also support a CLJS API#2019-10-0615:06borkdudeoverall impressive work, thanks for sharing @U0LJU20SJ#2019-10-0615:30pezSuper nice stuff!#2019-10-0615:41carocad> Is it a goal to have perfectly bidirectional snippets?
@U09LZR36F yes, that is a goal. You can check the test cases and see that currently it is possible to parse and stringify both clojure.core and cljs.core#2019-10-0615:43dominicmThat's awesome#2019-10-0615:43dominicmMight break the keyboard out now#2019-10-0615:45carocad> I see a couple of empty whitespace nodes there
@U04V15CAJ yeah, unfortunately I have not been able to get rid of those. The problem is that instaparse becomes too slow if I always checks for optional whitespace. So instead I made it mandatory and allowed it to be empty. Maybe in the future I can get rid of this but so far it doesnt seem to hurt and it probably would be easier to just provide a walk function which removes unwanted nodes 😉#2019-10-0615:46borkdudehow is performance overall?#2019-10-0615:47dominicmI measured instaparse a while ago against j.u.regex, and it was several orders of magnitude slower.#2019-10-0615:47dominicmI wasn't using instaparse's regex support though, so it might be faster when not using it#2019-10-0615:47dominicm(Sorry, not a useful answer)#2019-10-0615:47carocad> it seems instaparse supports .cljc. maybe parcera could also support a CLJS API
@U04V15CAJ I would need a bit of support there since I dont know of any “string building” api in Js. That is so far my the only show stopper since str was quite slow for big input#2019-10-0615:48borkdude@U0LJU20SJ I think the API for goog StringBuffer is more or less the same as StringBuilder#2019-10-0615:49borkdudehttps://google.github.io/closure-library/api/goog.string.StringBuffer.html#2019-10-0615:53carocad> how is performance overall?
@U04V15CAJ as @U09LZR36F mentioned, performance is not the best compared to other tools out there. A roundtrip of clojure.core takes around 6 seconds (in my machine) … around 8k lines#2019-10-0615:53dominicmThat's fairly reasonable I'd say#2019-10-0615:54borkdudeis that only the source dir? clj-kondo can lint clojure src in 2 seconds. so I'm holding off on swapping to Instaparse-based for now 🙂#2019-10-0615:55dominicmI think a specialized instaparse-like thing could be created.#2019-10-0615:55borkdudewait, this includes writing of course. what about only the parsing @U0LJU20SJ?#2019-10-0615:56dominicmWe could fire this up in a repl and find out... :p#2019-10-0615:57borkdudeI'm cooking dinner right now, will you be my REPL?#2019-10-0615:58carocad@U09LZR36F you are right on the spot. Performance varies depending on the machine so I can not promise anything 😅 . However, I just check and parsing takes most of the time …. 5.5 seconds#2019-10-0615:58borkdudeon a cheap macbook air:
linting took 1903ms, errors: 34, warnings: 387#2019-10-0615:59borkdudeit's not that bad though 5.5 seconds and can be very useful for tools that don't need to be super fast for editor support#2019-10-0616:00borkdudeI bet this grammar of yours can also be used to generate a Java parser that could be faster#2019-10-0616:00borkdudeusing ANTLR maybe#2019-10-0616:04carocadyeah, probably. Although I would also like to know how user friendly they are. Instaparse can point out things like ambiguities, failure position, metadata on each node. I think those are incredible tools and would prefer to make Instaparse faster than to rewrite the complete thing in a less user friendly tool#2019-10-0616:09dominicminstaparse is considered quite fast for what it is I think 🙂#2019-10-0616:09borkdude@U09LZR36F fwiw, parcera has the same metadata issue I had with rewrite-clj:
user=> (parcera/clojure "^:private []")
[:code [:whitespace ""] [:metadata [:simple-keyword "private"] [:whitespace " "] [:vector] [:whitespace ""]] [:whitespace ""]]
#2019-10-0616:10dominicmOh man, that's a shame.#2019-10-0616:10borkdudeit makes sense from a parsing->writing point of view but from a code analyzing point of view it's a bit unhandy#2019-10-0616:10dominicmI wonder if this form is easier to work with for re-shaping though#2019-10-0616:11borkdudewell, I just changed clj-kondo's "vendored" rewrite-clj. also I stripped out all the whitespace because it's just noise to clj-kondo#2019-10-0616:11dominicmI quite want all the whitespace 😛 I want a whitespace-preserving config/edn rewriter.#2019-10-0616:11borkdudedo you use metadata in config a lot?#2019-10-0616:12dominicmNot really, no. But I don't want to break what others are doing.#2019-10-0616:13carocad> fwiw, parcera has the same metadata issue I had with rewrite-clj:
@U04V15CAJ what issue is that :thinking_face: ?#2019-10-0616:15dominicmit's about convenience for parsing, consider this example:
(parcera/clojure "{^:x :a,1}")
;; =>
[:code
[:whitespace ""]
[:map
[:map-content
[:whitespace ""]
[:metadata [:simple-keyword "x"] [:whitespace " "] [:simple-keyword "a"] [:whitespace ","]]
[:whitespace ""]
[:whitespace ""]
[:number "1"]
[:whitespace ""]]]
[:whitespace ""]]
You have to unwrap every node to determine whether it's metadata or not in order to get to the real value.#2019-10-0616:15dominicmThe common desire is to access the real value#2019-10-0616:15borkdude@U0LJU20SJ for example you're analyzing this function: (defn ^String foo [^String x ^Long x] ...). When walking over the nodes, I generally don't want to check if a node is metadata containing some other value and then pull the value I'm actually interested out. I just want to work with those values and if I'm interested in metadata, look at that optionally.#2019-10-0616:18borkdude@U0LJU20SJ don't get me wrong, what you made is super cool. it's just something I noticed when working with rewrite-clj.#2019-10-0616:20carocadyeah, you are right. However we have conflicting goals. My goal was to guarantee bidirectional snippets and to optionally allow for people to only “see” a part of the complete parsing process. If I dont include those nodes there then I could not make a full roundtrip without losing information. My idea was that such things can be easily done with things like zippers and walk which can automatically remove them without having to actually check for it manually on an implementation#2019-10-0616:20borkdudebtw, rewrite-clj has a companion zipper namespace for rewriting. could also be nice for this lib, although you could maybe do it with normal clojure zippers#2019-10-0616:21carocad> don’t get me wrong, what you made is super cool.
no worries, all feedback is welcome. I was also thinking of putting some “node removal” functions in parcera but I am not sure if this should be in the core :thinking_face:#2019-10-0616:21borkdude@U0LJU20SJ true, conflicting goals indeed#2019-10-0616:21borkdudethe way I solved it in my fork of rewrite-clj is to lift metadata nodes as real metadata on the value nodes. you could check for that on the way back when writing out.#2019-10-0616:49borkdudeBtw, the benchmark of 5.5 was this just "core.clj" or entire Clojure src? I assumed entire Clojure src#2019-10-0617:02carocadnope, it was just core.clj#2019-10-0617:14borkdudeAh I see. I think if you would rewrite this using tools.reader it could be orders of magnitude faster, if that’s a goal#2019-10-0617:14borkdudeBut then you’re basically doing the same as rewrite-clj#2019-10-0617:23carocad> But then you’re basically doing the same as rewrite-clj
yeap, exactly. That is not a goal. rewrite-clj already does that so no need to do the same. That is what I meant before with “I prefer to make instaparse faster than to completely rewrite this just to make it faster”#2019-10-0617:23carocadparcera is still in its infancy … with time we will see which path it takes 😉#2019-10-0617:24borkdude👍#2019-10-0617:44Alex Miller (Clojure team)Btw there was an antlr grammar in Clojure long long ago, before the LispReader existed#2019-10-0618:41carocadoh really ? what happened with it ? I find it quite nice to have a grammar to look at as “source of truth” for a language. From what I saw in the clojure compiler it seems like a “one pass does all” kind of approach …. I guess due to performance ?#2019-10-0621:06dominicm(parcera/code
(m/rewrite (parcera/clojure "(-> a b c)")
[?tag . !rest-pre ... . [:list . (m/pred whitespace?) ... . [:symbol "->"] . (m/or (m/pred whitespace?) [:symbol _ :as !args]) ...] . !rest-post ...]
(m/with [%list [:list !args [:whitespace " "] . %list ...]]
[?tag . !rest-pre ... . %list ... . !rest-post ...])
[?tag . (m/cata !content) ...]
[?tag . !content ...]
?x
?x))
I wrote (with a lot of help from #meander) a little tool for rewriting (-> a b c) to (a (b (c))) 🙂 Very handy#2019-10-0623:46Alex Miller (Clojure team)@U0LJU20SJ was replaced with the LispReader#2019-10-0623:57Alex Miller (Clojure team)InsideClojure journal 2019.23 http://insideclojure.org/2019/10/06/journal/#2019-10-0702:30Candidjoker v0.12.8 is out: https://github.com/candid82/joker/releases/tag/v0.12.8#2019-10-0712:38blueberryNew release 0.10.0 + Momentum and Nesterov Momentum sheepy
http://aiprobook.com/deep-learning-for-programmers?release=0.10.0&src=sclojure#2019-10-0805:28Candidjoker v0.12.9 is out: https://github.com/candid82/joker/releases/tag/v0.12.9 (fixes (read-line) regression in v0.12.8)#2019-10-0816:22bozhidarCIDER 0.23 is out! https://metaredux.com/posts/2019/10/08/cider-0-23-lima.html#2019-10-0819:11greglooklein-monolith 1.3.0 is available, improving compatibility out of the box with JDK 9+
https://github.com/amperity/lein-monolith/blob/master/CHANGELOG.md#130---2019-10-07#2019-10-0906:02jacekschaeThis week on https://clojurescriptpodcast.com Atom setup with @mauricio.szabo#2019-10-0922:21carocadthanks to @pez parcera now supports Clojurescript execution 🙂. v0.2.0 released
https://github.com/carocad/parcera#2019-10-0923:09mauricio.szaboOh, he was faster than me 😄#2019-10-0922:54Daniel SlutskyRegistration and more details towards the datahike meeting next week:
https://twitter.com/scicloj/status/1182065848955092992#2019-10-0923:20mauricio.szaboJust a quick post about my first experience with native apps with proton-native in ClojureScript, using the wonderful NPM integration on shadow-cljs: https://mauricio.szabo.link/blog/2019/10/09/quick-post-native-apps-with-clojurescript/#2019-10-1008:31borkdudeReleased babashka, a native scripting tool for Clojure, v0.0.21:
https://github.com/borkdude/babashka/releases/tag/v0.0.21#2019-10-1009:53mkvlryou're really on 🔥 right now, thanks a lot for all your work. Just looked at https://www.clojuriststogether.org/projects/ to see if you're funded currently but it looks like you're not…#2019-10-1009:53borkdudeI would apply if I didn't have a job right now 😉#2019-10-1103:00tony.kayI’ve just released a Fulcro Native template project, and short YouTube video covering how it works. It demonstrates how easy it is to get a full-stack webapp and native mobile app running in the same project (with live hot code reload for both web/native), logic sharing, all talking to the same server back-end.
https://github.com/fulcrologic/fulcro-native-template
https://www.youtube.com/watch?v=03I9uRxVQsc#2019-10-1112:31vemvlet and letfn have joined the https://github.com/nedap/speced.def family. Sample usage:
(speced/let [^String a x ;; assert that `a` is a `String`, keep the type hint
{:keys [^long? b]} y ;; assert that `b` satisfies `long?`, infer a `Long` type hint
[[[[^{::speced/spec (spec/coll-of boolean?)} c]]]] z] ;; assertions support deep destructuring and custom inline specs
,,,)
Enjoy!#2019-10-2511:39Jakub Holý (HolyJak)Hello @U45T93RA6! Do I understand correctly that speced does not generate s/fdef and thus does help if you want to do generative testing https://clojure.org/guides/spec#_testing ? Thank you!#2019-10-2511:45vemvHi!
Indeed it does not emit fdefs. It only emits :pre/:post conditions, or assert statements (which are essentially the same mechanism).
So it doesn't particularly help generative testing. But it does encourage creating more (and better) specs, which can well be reused in the context of generative tests.
At Nedap we certainly put in practice both this library, and the occasional generative testing.
tldr, it's orthogonal.#2019-10-1114:14borkdudeclj-kondo v2019.10.11-alpha: mostly minor bugfixes and enhancements
https://github.com/borkdude/clj-kondo/releases/tag/v2019.10.11-alpha#2019-10-1115:15jerger_at_ddaProudly present a new BugFix release for data-test.
https://github.com/DomainDrivenArchitecture/data-test#2019-10-1216:12CameronAnnouncing tsv2csv https://github.com/cjbarre/tsv2csv#2019-10-1319:54OlicalI released Conjure v2.0.0 today, slight breaking changes around config, hence the 2. You can now easily hook Conjure into REBL so your evaluations and their results appear in the UI for your browsing pleasure!
This integration isn't specific to REBL though, if you have any tool or library you'd like to hook into all of your evaluations, now you can! Hooks provide a way to configure tools.namespace/refresh as well as alter code before it's evaluated and see the resulting data. Go wild! (see the README for examples https://github.com/Olical/conjure#hooks)
I've also improved how you filter a prepl connections down to specific files, directories and extensions. It should make it easier to work in multiple Clojure(Script) prepls at once in one project without evaluating the wrong thing in the wrong environment.
https://github.com/Olical/conjure/releases/tag/v2.0.0#2019-10-1320:33seancorfieldorg.clojure/java.data "0.1.4" -- the first new release in seven years of this contrib library to convert Java beans to Clojure data and vice versa! https://github.com/clojure/java.data Fixes most of the open issues that were still valid (invalid issues have all been closed). Follow up via DM or in #clojure (thanks to @jonpither for spurring me to work on this!)#2019-10-1419:23carocadparcera the grammar-based Clojure(script) parser is now 3 times faster than before 🚀. Unfortunately this lead to some breaking changes so make sure to check the release notes 😅
- https://github.com/carocad/parcera
- https://github.com/carocad/parcera/releases/tag/v0.3.0#2019-10-1512:22borkdudeCurious to hear what made it faster 🙂#2019-10-1514:14carocadfollowing and understanding the Performance notes from Instaparse. two main points:
- defining all tokens completely instead of on parts
- avoid checking all paths of the grammar by using ordered OR instead of unordered or.#2019-10-1514:16carocad@U04V15CAJ btw, no more empty whitespaces 😏#2019-10-1514:16borkdudenice 🙂#2019-10-1514:19carocadstill not blazing fast as your parser but much better than before. I am still checking how can I make it faster though :thinking_face:#2019-10-1514:21borkduderewrite-clj isn't my parser btw#2019-10-1514:21borkdudeI'm only using it#2019-10-1420:50Daniel SlutskyUpcoming web meeting meeting: @ikitommi about Malli -- plain data schemas in Clojure/Script
https://twitter.com/scicloj/status/1183845705380696064#2019-10-1509:24blueberryNew release 0.4.0 + Orthogonalization and Least Squares sheepysheepysheepysheepy
https://aiprobook.com/numerical-linear-algebra-for-programmers?release=0.4.0&source=cslack#2019-10-1511:41lnostdalhmm, only Patreon? x)#2019-10-1512:00blueberry@UH2S6LS86 Unfortunately, this is the only option that works where I live.#2019-10-1513:30eval2020Periodic reminder that a searchable archive of this Slack-team can be found at Clojurians-Zulip: https://clojurians.zulipchat.com/#narrow/stream/180378-slack-archive
It goes back to Feb of this year (and gains approx. 4700 msg/week).
If a Slack-channel is not showing up there, make sure to add @zulip-mirror-bot to said Slack-channel (ie /invite @zulip-mirror-bot).
Followup in #community-development (here or on Zulip).
Enjoy!#2019-10-1520:52csmI’ve been working on this https://github.com/csm/s4 recently, which simulates the S3 and SQS APIs. This release (0.1.7) is probably “good enough” for me to announce it.#2019-10-1520:55csmThe reason I wrote this was to do some exploration on some cool storage systems that came out recently, and seeing if using S3 as the storage backend would be a viable option, since S3 storage is so inexpensive. Datahike on S3/DDB: https://github.com/csm/datahike-s3; Crux on S3/SQS: https://github.com/csm/crux-aws#2019-10-1520:57csmThere is quite a lot of the S3 API still left to implement, but the basics are all there, and seem to work well with the Cognitect AWS client.#2019-10-1607:59orestisLove it!#2019-10-1614:58sbMini Vega Chart library (alpha version) for Shadow-cljs projects. https://github.com/damesek/vega-charts-shadow-cljs - that is forked from OZ, as a mini version, because at my larger projects.. I had a dependency hell (conflicts which I can’t manage..).#2019-10-1615:57gklijsI did something similar yesterday. Moving from creating static html, to react component instead.#2019-10-1617:44sbYes, I started a same way. I was happy with OZ, just not compatible with our architecture. I think, shadow-cljs is a cool thing, easy setup npm libs. Create nice projects#2019-10-1621:56dcjOz-lite? 🙂#2019-10-1622:04gklijsIn my case or would be re-oz or something.. Building it into the router so a certain diagram can be easily shared. Very specific, not generic enough to make it a separate lib I think. Although line plots comparing different 'flavours' along a time related y-axis might be one of the most common graphs..#2019-10-1615:21jacekschaeThis week on https://clojurescriptpodcast.com/ we talk with @cfleming about setting up Cursive for #clojure and #clojurescript development.#2019-10-1619:45borkdudereleased the Small Clojure Interpreter v0.0.10:
https://github.com/borkdude/sci/releases/tag/v0.0.10#2019-10-1714:44Ivan Fedorovnew crux release [juxt/crux-core "19.09-1.5.0-alpha"]
Theme: configurable database topology. More tools to shape basic configurations the way you want.
PR #340: Breaking Remove api helpers for creating specific node types
Refactoring: Modularize configuration options defaults and documentation
Refactoring: Test fixtures more composable
#352: fix Kotlin multi-threaded node-start issues
#348; Increase range constraints var-frequency for join order
https://github.com/juxt/crux
P.S. Love and support are always nearby on #crux#2019-10-1721:35vlaaad#cljfx 1.5.0 is released, introducing new feature: ext-set-env/`ext-get-env`, allowing environment manipulation, which is similar to react's contexts. Cljfx is a declarative, functional and extensible wrapper of JavaFX inspired by better parts of react and re-frame. https://github.com/cljfx/cljfx/blob/master/CHANGELOG.md#150---2019-10-17#2019-10-1910:54sakalliHi * the folks at Scicloj are looking into organizing a Clojure data science meetup in connection to ClojureD end of Feb in Berlin. Are you joining us / interested? Let us know -> https://docs.google.com/forms/d/e/1FAIpQLSegn2lQ2TEoh_Lg48YcDy-U_aIjtFkQFb7ifIuz6C8izep2Fg/viewform#2019-10-1919:21Daniel SlutskyVideo of the Scicloj meeting about Datahike we had on Monday: https://youtu.be/Hjo4TEV81sQ
Many thanks to @konrad.kuehne for the talk, @sakalli for moderating and @danielsz for some historical background he gave through the talk. ❤️#2019-10-2012:50jarohen(finally!) released Nomad 0.9.0 - preferring to keep Clojure configuration and secrets near the code they're configuring - more rationale and code at https://github.com/jarohen/nomad#2019-10-2019:12borkdudeSmall Clojure Interpreter playground!
https://borkdude.github.io/sci.web/#2019-10-2106:49ikitommiMalli Schema Playground! (inspired by web-tools by @borkdude) - https://malli.io#2019-10-2107:30steveb8nfirst time I’ve seen a playground. so much better than a readme. has anyone figured out how to embed it in a readme?#2019-10-2109:10borkdudemaybe take a look at how @U0L91U7A8 does it with klipse?#2019-10-2111:15Filipe SilvaHeya all, I've just published https://github.com/filipesilva/create-cljs-app. It is focused on making it easy for JS and React developers to get started with ClojureScript.
You can use it via npx create-cljs-app my-app or yarn create cljs-app my-app.
That will create an app on my-app that has preconfigured scripts for building, testing, e2e, linting, and formatting. Everything works on Linux, OSX, and Windows.
I'm not super well aligned with idiomatic CLJS usage so if you think there's something that should be done in another way please let me know.
A couple of big thank yous: @roman01la for providing the create-cljs-app npm package and making zlint-clj support whole dirs, @borkdude for helping me distribute clj-kondo on npm, and @thheller for making the awesome shadow-cljs that the starter uses#2019-10-2111:17Filipe SilvaTogether with the above, clj-kondo is now on npm too via https://github.com/filipesilva/clj-kondo. You can install it globally or locally and run it as usual. It will use native binaries where available and fallback to the jar file otherwise.#2019-10-2115:53Alex Miller (Clojure team)tools.deps.alpha 0.8.578, clj 1.10.1.478 are now available#2019-10-2115:54Alex Miller (Clojure team)These releases are now available in the usual places.
Changes:
* Add support for :deps and :paths in aliases to replace the equivalent project :deps and :paths - see below
* TDEPS-29 - fix -Sgen unnecessary newlines in generated pom in Java 9+ (big thanks to the tip in ask.clojure by Andrey Antukh!)
* TDEPS-138 - add tools.deps.alpha.reader/user-deps-location function
The big change here is to support replacement :deps and :paths in aliases, designed for tools that don't require the project classpath. In these cases, you can use :deps (and :paths if needed, although that's probably uncommon) instead of :extra-deps (or :extra-paths) to set the tool's classpath (and ignore the project :deps entirely). This can reduce the risk of conflicts between the tool classpath and the project classpath.
For example, you could configure depot in a deps.edn as follows:
{:aliases
{:depot
{:deps {olical/depot {:mvn/version "1.8.4"}}
:main-opts ["-m" "depot.outdated.main"]}}}
And run it with clj -A:depot. Here, the :deps replaces the project deps so there is less risk of conflict between depot's deps and your own project deps. Additionally, I would encourage you to install tools like this not in your project deps.edn, but once in your ~/.clojure/deps.edn instead.
Note that is not applicable to every tool - some tools (test runners in particular) rely on running in the context of your project classpath and thus I would not recommend any changes to how they are configured (they should still use :extra-deps, etc).#2019-10-2116:40seancorfieldThere's an irony there: Depot 1.8.4 actually will use the project deps by default and does The. Right. Thing. and that is how we use it. Depot 2.x does not -- it reads the deps.edn files you tell it, and that actually breaks our setup.#2019-10-2116:42seancorfieldAre :config-user and :config-project new in -Sdescribe @U064X3EF3 or have I just not noticed them before?#2019-10-2116:44Alex Miller (Clojure team)doh. yes, :config-user and :config-project are new in -Sdescribe as well#2019-10-2207:58danielcomptonClojurists Together is going to be funding 4 projects $9,000 each. Check out what kinds of projects our members are looking for: https://www.clojuriststogether.org/news/q4-2019-survey-results/. Applications close Saturday, October 26th, 2019 at 11:59pm PST.#2019-10-2208:00dominicmJuly?#2019-10-2208:02danielcomptonOops, October 26th!#2019-10-2208:05pez> The developments on Fireplace and CIDER were of no use for us, because we use Cursive. I hope the next projects won't only benefit VIM/Emacs users.
A strange perspective, I think. There is a super easy way to sponsor Cursive already!#2019-10-2208:06dominicmI guess the request is for general-purpose clojure enhancements.#2019-10-2209:06arnaud_bos"Could do better"
> Recurring, monthly sponsorship of certain "essential" projects (e.g. leiningen and cider come to mind)
Good idea but people should look into Patreon for this kind of thing.#2019-10-2209:40borkdudeThere's other donation options too (configurable behind the sponsors button Github for example)#2019-10-2210:02vemv> The developments on Fireplace and CIDER were of no use for us, because we use Cursive. I hope the next projects won't only benefit VIM/Emacs users.
CIDER, (specifically cider-nrepl, refactor-nrepl) is editor-agnostic tooling. You certainly can leverage it from a vanilla repl, or from arbitrary participating editors
Best explained in this series: https://metaredux.com/posts/2018/11/09/ciders-orchard-the-heart.html#2019-10-2210:05slipsetIf I were to think very hard, the only thing that I'm "missing" is a good code-analysis tool for Clojure.#2019-10-2210:06slipsetNot saying SonarCube is the greatest thing ever, but some of the things it brings to the table is quite useful.#2019-10-2210:07slipsetI guess making a tool of some sort which integrates some of the stuff found here https://blog.jeaye.com/2017/08/31/clojure-code-quality/ would be of interest.#2019-10-2210:11vemv@U04V5VAUN: Coming soon 🙂 https://clojars.org/formatting-stack
available, but its github counterpart is still private since we cannot offer support to the wider public yet 🙂
Bundles Eastwood, bikeshed, cljfmt, kondo et al. Open to arbitrary formatters/linters via a simple protocol.
Aiming to a release around december#2019-10-2210:12slipsetCool!#2019-10-2210:13slipsetI sto^H^H^Hforked some code some time ago and hacked a bit on it to do#2019-10-2210:13slipsethttps://github.com/slipset/analyse-this#2019-10-2210:13slipsetIt's a very simple (and probably bad) code-complexity analyzer.#2019-10-2210:54dominicmfunding cider funds cider.el & cider-nrepl. So it's not all agnostic. However, all of the major free editors have been funded now I think (maybe not atom/chlorine?). And vscode/fireplace/cider all benefited from each others.#2019-10-2210:54dominicmBut I understand how perception could be that way.#2019-10-2210:57borkdudeI actually don't care that much if I'm going to use all the specific tools that Clojurists Together funds. Investing in better tooling is good for the community overall and I'm benefiting from a better, bigger community.#2019-10-2212:35blueberryNew book release 0.11.0 sheepy sheepy sheepy
Adaptive Learning Rates: RMSprop and Adam
https://aiprobook.com/deep-learning-for-programmers/#2019-10-2213:22mpenetNew & improved exoscale/ex (formerly mpenet/ex) is available -> https://github.com/exoscale/ex#2019-10-2318:33jacekschaeThis week on https://clojurescriptpodcast.com Vim editor
setup for #clojure #clojurescript development with @dominicm#2019-10-2409:16borkdudeVSCode extension for clj-kondo, all in one, so no external dependencies needed. Also works on Windows.
https://marketplace.visualstudio.com/items?itemName=borkdude.clj-kondo
It will be bundled with Calva (cc @pez), so if you're already using that, it will come your way.#2019-10-2505:40Crispinsimple command line tool to render hiccup templates into html. single, fast, native binary (via graal) for linux. Java uberjar for the others.#2019-10-2505:40Crispinhttps://github.com/retrogradeorbit/bootleg#2019-10-2506:59borkdude@U1QQJJK89 Interesting. I wanted to add this feature to jet as well:
https://github.com/borkdude/jet/issues/49
But your tool probably goes a bit further than that 🙂#2019-10-2507:00borkdudeWould maybe be nice if you could also add a Mac build#2019-10-2507:06borkdudeHow/where did you implement for expressions in your code?#2019-10-2507:28CrispinHey thanks heaps for sci. And clj-kondo, too!#2019-10-2507:29Crispinexpressions I just pass in to the evaluator directly here: https://github.com/retrogradeorbit/bootleg/blob/master/src/bootleg/core.clj#L61-L63#2019-10-2507:30Crispin(setting path to ".")#2019-10-2507:31CrispinI want a mac build. And I actually had a look over your clj-kondo circle-ci yaml. I want to copy, but I see that circle ci requires a paid monthly account to access mac builds. I investigated travis which has a free account for open source builds. Do you know of any projects building mac artefacts on Travis?#2019-10-2507:38jeroenvandijk@U1QQJJK89 You could look at Github Actions https://github.com/borkdude/closh-sci/blob/master/.github/workflows/deploy.yml#L58#2019-10-2507:39jeroenvandijkNice work btw. I think it's interesting to have the opposite conversion as well (html to hiccup). E.g. for when you are using twitter bootstrap and there only html examples#2019-10-2507:43Crispin@U0FT7SRLP hey thanks! Part of my personal use case is incorporating html templates designed by someone else. Was tricky (and a little hacky) to implement round trip for every conversion type. I have built a test set for them all so they keep working. I will checkout github actions thanks!#2019-10-2507:49borkdude@U1QQJJK89 Mac builds are free on CircleCI for open source. cc @U0K592YDP#2019-10-2507:49borkdudeI don't pay CircleCI to do my clj-kondo builds#2019-10-2507:50borkdude@U0FT7SRLP I want to do the round-trip feature here: https://github.com/borkdude/jet/issues/49#2019-10-2507:51jeroenvandijkCool 🙂#2019-10-2507:52Crispin@U04V15CAJ Oh great! That wasn't clear from the circle ci pages. So clj-kondo is circle ci. closh-sci is github actions. Is one preferable to the other? Are you moving away from one and to another? What do you recommend?#2019-10-2507:52jeroenvandijkclojure.pprint/pprint could als be a nice addition#2019-10-2507:52borkdudejet has --pretty which does pprint#2019-10-2507:52jeroenvandijkawesome 🙂#2019-10-2507:52jeroenvandijksorry#2019-10-2507:52Crispinpprint is already included. using fipp. native-image wouldnt work with pprint#2019-10-2507:53borkdudesame for jet, also uses fipp#2019-10-2507:53Crispinwell I had problems with it#2019-10-2507:53borkdude@U1QQJJK89 closh-sci is not really something you should look at right now, it's a WIP repo which will disappear soon. I'm not moving away from CircleCI as I'm happy with it.#2019-10-2507:54borkdudeCompared to GH actions it offers deps caching and SSH access#2019-10-2507:54borkdudeHaving said that, GH actions is bloody fast for GraalVM builds#2019-10-2507:55borkdudeoh, you're actually using sci, I see 🙂#2019-10-2507:57Crispinyes! thankyou very much for all your hard work. clj-kondo was actually the gateway project that got me following your work. Using it with flycheck really improved my emacs experience. And then I discovered sci.#2019-10-2507:59borkdudeThanks! Nice to see sci is finding it's way into binary Clojure apps 🙂#2019-10-2508:03CrispinI want to include the enlive macros into the evaluated code namespace. How is best to do that? Would I just prepend defmacro definitions to the evaluated text? Are you hatching some other way?#2019-10-2508:04borkdudeyou can try adding the macros like this:
{:bindings {'mymacro (with-meta @#'my-macro {:sci/macro true})}}
#2019-10-2508:05borkdudebut you'll need to upgrade to a newer sci for this#2019-10-2508:05borkdude0.0.11-alpha.2#2019-10-2508:06borkdudesee: https://github.com/borkdude/sci/blob/master/CHANGES.md#2019-10-2508:13borkdude@U1QQJJK89
(sci/eval-string "(bcond false :foo true :bar)" {:bindings {'bcond (with-meta @#'cond {:sci/macro true})}})
:bar
#2019-10-2508:19borkdudeAdded an issue to document this: https://github.com/borkdude/sci/issues/125#2019-10-2509:45Crispin#2019-10-2509:45Crispindidn't work 😞#2019-10-2509:47borkdudeI've notified Marc about this. I think they need to toggle a flag because they don't enable it by default for everyone.#2019-10-2509:47borkdudeBecause of capacity.#2019-10-2509:47borkdudeBut you'll get it.#2019-10-2509:50borkdudebut if you can't wait, you can also try gh-actions I guess 🙂#2019-10-2509:51CrispinYeah I'll try github actions for now. But gee, circleci looks pretty slick. github integration is very nice.#2019-10-2510:06Marc O'Morainwhat’s the repo?#2019-10-2510:06Marc O'MorainI’ll enable it now#2019-10-2510:07Marc O'Morainretrogradeorbit should have macOS access now#2019-10-2510:07Marc O'Morainyou will need to push a new commit to clear some state in our system#2019-10-2510:16borkdude^ @U1QQJJK89#2019-10-2511:09Crispin@U0K592YDP @U04V15CAJ Thankyou so much. will give it a test#2019-10-2516:49Crispin@U04V15CAJ I have some test prelease builds up here: https://github.com/retrogradeorbit/bootleg/releases/tag/v0.1.5-alpha.1#2019-10-2516:49Crispinif you try any let me know how they go#2019-10-2516:50CrispinI basically just copied your clj-kondo recipes wholesale 👍#2019-10-2516:59Crispin@U0K592YDP thanks again for your help. Mac users are now included in the fun!#2019-10-2517:00Marc O'Morain👍👍#2019-10-2517:00borkdude@U1QQJJK89 awesome. how did you make the Windows build?#2019-10-2600:44Crispin@U04V15CAJ with appveyor. again copying clj-kondo. graal is still experimental on windows though. Had to disable https support: https://github.com/oracle/graal/issues/1672#2019-10-2607:49borkdudeBut does it work well on Windows? I haven't had much luck with clj-kondo on Windows 🙂#2019-10-2609:36Crispinno idea! I don't run windows at all. I guess I'll just wait for windows users to open tickets if it doesn't work. 😅#2019-10-2610:04borkdudehehe#2019-10-2509:39alzaAny DJ's in here? 🎶🙂 https://github.com/digital-dj-tools/dj-data-converter#2019-10-2509:43vemvnice stuff, will take a look!
there's also the https://github.com/Deep-Symmetry stuff#2019-10-2510:58Jakub Holý (HolyJak)I have created #atom-editor for Atom users to help each other, announce plugins etc. Join!#2019-10-2514:31practicalli-johnFYI - there are a number of related Atom channels, #protorepl #proton and #editors. Only #chlorine seems to have active discussions though. I would be interested to hear what people are doing with Atom though, outside of Chlorine#2019-10-2520:26dchelimskyCognitect Labs' aws-api 0.0.8.391 https://groups.google.com/forum/#!topic/clojure/j3rBeZHHtHs#2019-10-2523:35andy.fingerhutcore.rrb-vector version 0.1.1: https://groups.google.com/d/msg/clojure/awoMDY9IlqA/7JJuO0ozAQAJ#2019-10-2610:04borkdudeclj-kondo v2019.10.26:
- Windows support via LSP and NPM
- Major improvement in parser feedback when typing unbalanced parens
and more!
https://github.com/borkdude/clj-kondo/releases/tag/v2019.10.26
Follow up in #clj-kondo.#2019-10-2815:57otfromtyping unbalanced parens? 😉 #paredit4life#2019-10-2815:59borkdude@U0525KG62 some people don't know paredit yet (beginners) and some other people (of course not me... cparen) sometimes copy paste code which is unbalanced.#2019-10-2816:00otfromI know. This is really cool and will be helpful for a lot of people. Thx for the new version!#2019-10-2816:00borkdudeThank @U0K592YDP for the parsing improvements 🙂#2019-10-2612:01practicalli-johnPracticalli Clojure YouTube channel - 50 videos to help you discover the fun in functional programming with Clojure
https://www.youtube.com/playlist?list=PLpr9V-R8ZxiDjyU7cQYWOEFBDR1t7t0wv
https://practicalli.github.io/#2019-10-2612:11borkdudeThis is awesome.#2019-10-2621:59borkdudeBabashka, a native scripting tool for Clojure, v0.0.22: support for reader conditionals:
https://github.com/borkdude/babashka#reader-conditionals#2019-10-2622:04borkdudeImplementation detail: to make this work, I also had to add support for reader conditionals to sci and edamame:
(edamame/parse-string "[1 2 #
#2019-10-2718:40Ivan Fedorovpage-renderer 0.4.3
- Improved Java 8 support, with proper asset hashing now
- Better service workers with for more consistent updates of your app.
https://github.com/spacegangster/page-renderer#2019-10-2813:05Bingen Galartza IparragirreWe just released a Duct library for interacting with the Webflow CMS API (For now, mainly for the e-commerce API)#2019-10-2813:05Bingen Galartza Iparragirrehttps://github.com/magnetcoop/cms.webflow#2019-10-2901:22tony.kayI’ve created a library that is like a pared-down version of Ghostwheel, but that works in a way that is more amenable for use as a type-like system for clj(s) development. It limits dependencies, and allows you finer control over how specs are applied to functions. Basically, you can co-locate declarations of expected args and return type with functions, then turn on/off an advisory or enforced (thrown exception) variant.
Productions builds can choose not to suffer from any performance penalty or increase in build size.
https://github.com/fulcrologic/guardrails/
NOTE: Alpha quality at this point. I’m sure I overlooked something…#2019-10-2908:16jaihindhreddyNice lil' throwback to Simple Made Easy#2019-10-3011:31kwladykaI wrote an article about ClojureScript form validation using spec:
https://clojure.wladyka.eu/posts/form-validation/
This article is also a solution for Clojure backend API to respond with human readable errors.
---
I encourage to try my library for ClojureScript form validation using spec https://github.com/kwladyka/form-validator-cljs
Here is a demo https://kwladyka.github.io/form-validator-cljs/
---
Please give me feedback if you like / dislike it and what I can do better for you.#2019-10-3014:54kennyInteresting approach. This requires you to write your specs always using a s/def, correct? i.e., you cannot use inline functions in an s/and#2019-10-3015:55kwladykayes, because you use this (s/def ::email ...) keyword to determine what invalidated the map#2019-10-3015:59kwladykaanother approach is to assign to each input field spec definition seprately instead of using ::form
(-> {:names->value {:email ""
:password ""}
:form-spec ::form
:names->validators {:email [email-exist?]
:password-repeat [password-repeat? ::spec-key]}}
(form-validator/init-form))
In library which I made you can use one global spec, which is the whole form and you can additionally define spec for each map key {:password-repeat [password-repeat? ::spec-key]}
So here you can set ::spec-key additionaly besides of ::form.#2019-10-3016:01kwladykacombining 1 spec for whole form and let add additional fn / specs for each form input seems to be fully functional for all you can need#2019-10-3017:11niwinzi have used a similar approach in my own projects, nice article!#2019-10-3021:27Oliver GeorgeUsing :via as a an error code seems nice. Slight conflation perhaps but quite handy. Here's a quick hack in a prototype I wrote recently, great to see others doing similar things.
(defn problems
[spec data]
(for [{:keys [path via val]} (::s/problems (s/explain-data spec data))
:when (seq path)]
{:path path :code (last via) :val val}))
#2019-10-3021:29kennyFor those interested, we do something similar in https://github.com/Provisdom/user-explain. It lets you dispatch on anything in the explain-data problem rather than just the path.#2019-10-3013:20athomasoriginalQuick post about deploying CojureScript to a webserver https://betweentwoparens.com/deploy-clojurescript-on-nginx 🎉#2019-10-3018:32jacekschaeThis week on http://clojurescriptpodcast.com we are talking to @roman.bataev
about Joker - Small #clojure interpreter and linter#2019-10-3019:14TasosFirst public release. Helpful if you come from go-lang and want to try clojure, or if you work on Windows:
https://github.com/tasosx/tools4clj#2019-10-3020:08aviInteresting!
The README is solid 👏
One suggestion: in addition to the What is this? section, it’d be helpful if there was also a Why is this? section — i.e. Rationale. Just my 2¢#2019-10-3021:35TasosThank you for your feedback. 😃
The Why? section existed, but eventually transformed to Is it only for Windows? section, and ease of installation/update that golang offered, the Usage section.#2019-10-3115:02aviMy pleasure. Ah I see, yeah it’s always interesting how docs evolve. You might want to bring back the rationale section. Now that those other sections exist, it can be short and sweet.#2019-10-3020:03borkdudeRewrote the parser configuration options for edamame, a configurable EDN parser which attaches location metadata to values.
Examples: https://github.com/borkdude/edamame/blob/master/README.md#parser-options
API docs: https://cljdoc.org/d/borkdude/edamame/0.0.8-alpha.4/api/edamame.core
100% backwards compatible with the previous options, which have now become undocumented.#2019-10-3109:02slipsetFigured I'd arrange a lunch somewhere in Oslo for Clojure people. Here's a doodle#2019-10-3109:02slipsethttps://doodle.com/poll/nqbk859dqnyisnea#2019-10-3112:38Bingen Galartza IparragirreStripe API integration for the Duct framework#2019-10-3112:38Bingen Galartza Iparragirrehttps://github.com/magnetcoop/payments.stripe#2019-10-3114:31arttukaI published a new library that wraps Material UI v4 for use with Reagent. It includes @material-ui/core, @material-ui/core/styles, @material-ui/icons and @material-ui/pickers, all wrapped to nicely work in Clojurescript.
https://github.com/arttuka/reagent-material-ui#2019-11-0107:57Daniel SlutskyHere is the Malli meeting video: https://twitter.com/scicloj/status/1190173919082364928
Many thanks to @ikitommi for the talk, and to @teodorlu for moderating.#2019-11-0110:01borkdude@U066L8B18 Hey, thanks for putting this together. Where do we find scicloj on Clojurians Slack?#2019-11-0110:32otfromin slack, probably in #data-science , but things really happen in zulip https://clojurians.zulipchat.com/#narrow/stream/151924-data-science#2019-11-0110:33otfromand https://clojurians.zulipchat.com/#narrow/stream/203279-scicloj-org#2019-11-0110:37Daniel SlutskyThanks.
Yes, in Zulip there are specific streams for certain projects, and for certain aspects of community building.
scicloj-org mentioned by @U0525KG62 is the main zulip stream for the people who have decided to be involved in discussing goals and priorities of scicloj community building.
It is a private stream, not because it is secret, but as a practice to keep discussions focused on a task group spirit (rather than the broader, public data-science stream).
Everybody are invited to join, of course.#2019-11-0118:26seancorfieldorg.clojure/core.memoize {:mvn/version "0.8.2"} -- pluggable memoization based on org.clojure/core.cache {:mvn/version "0.8.2"}; https://github.com/clojure/core.memoize -- provides an easier way to build your own memoization caches via memoizer (the old, harder way with build-memoizer should be considered deprecated); fixes seed function. Follow-up via DM or in #clojure#2019-11-0122:49salamFirefox 71 (beta, developer edition) just received built-in Clojure(Script) syntax highlighting.#2019-11-0201:05yogthosa data flow engine for Clojure/Script https://domino-clj.github.io/#2019-11-0214:17eggsyntaxCool! The change-history is a really nice feature.#2019-11-0305:18yogthosIndeed :)#2019-11-0217:17gklijsRevised open-bank-mark to be simpler and did some other improvements. It's sort of a playground in using kafka with GraphQL (where the default implementation is in Clojure). Repo at https://github.com/openweb-nl/kafka-graphql-examples more details at #graphql#2019-11-0218:41bozhidarThe first ever “State of CIDER” survey is out https://metaredux.com/posts/2019/11/02/state-of-cider.html#2019-11-0220:58vdmit11From your survey, I found out about sayid, gonna try it, thanks.#2019-11-0220:58vdmit11Oh, yes, and by the way, thanks for developing CIDER, it is a really good tool.#2019-11-0221:23borkdudeSubmitted. Curious about the results!#2019-11-0307:51bozhidarMe too! 😄#2019-11-0220:05borkdudethe domain http://re-find.it will expire soon and is now redirected to https://borkdude.github.io/re-find.web#2019-11-0301:10eggsyntaxIf you want to renew it, I imagine we could find a few people to share the cost. I'd certainly kick in, say, $20 a year toward it, maybe a bit more if we come up short. Up to you, of course. Or has it just not been getting any traffic? I've had it bookmarked for ages, but in practice I never think to pull it up...#2019-11-0310:42borkdudeit doesn't have that many users, just a few a day, so I'm fine with just hosting it on github#2019-11-0310:44borkdudeit's not like it's going away#2019-11-0315:40Lennart Buit(I always had trouble with the name, maybe it makes sense to create a landing page that offers links to your tools ^^?)#2019-11-0315:41borkdude@UDF11HLKC sure. for now you can just go to my https://github.com/borkdude page and view the pinned repos#2019-11-0315:42borkdudeor use bookmarks 🙂#2019-11-0315:43Lennart Buitbrrr, 2007 called#2019-11-0315:43borkdudemaybe I should update my website though (that's something I should have done months ago..)#2019-11-0315:43borkdudehaha#2019-11-0315:44Lennart Buit(I have been paying for my domain for years, and it still has no website)#2019-11-0315:44borkdudethanks for making me feel better#2019-11-0319:54borkdudeclj-kondo v2019.11.03: https://github.com/borkdude/clj-kondo/releases/tag/v2019.11.03#2019-11-0411:39plexusI downloaded the download stats from clojars so you don't have to https://github.com/plexus/clojars-stats#2019-11-0411:40martinklepschBut now we have to download them from GitHub 😛 Will this repo be kept up to date automatically?#2019-11-0411:41martinklepschI also wrote some code at some point, downloading stats into a local SQLite database: https://github.com/cljdoc/clojars-stats#2019-11-0411:45plexusgetting them from github should be a lot faster than pulling them off the API. It's not automatically updated, you can easily use the oneliner in the README to get whatever you're missing#2019-11-0411:47martinklepschI see. Would be curious to see how you use jet/babashka to analyze, would be a cool demo for those tools#2019-11-0411:57plexusI might do a nextjournal notebook as soon as I have five minutes of idle time ;)#2019-11-0412:15borkdudeThanks for the shoutout to babashka and jet.
Your stats example is here in the gallery:
https://github.com/borkdude/babashka/#view-download-statistics-from-clojars#2019-11-0417:04borkdude@U07FP7QJ0 Maybe it makes sense to group those EDN files in one or more subdirectories, since having them on the top level makes loading the Github repo in the browser slow, creates a warning and hides the README#2019-11-0416:53chrisntech.datatype has a new release. We are currently using it for working with forecast datasets which means it is getting tested with high dimensional large numeric datasets. We recently added support for buffered images and for colorizing 1 and 2 dimensional tensors:
https://github.com/techascent/tech.datatype#2019-11-0416:54chrisnhttps://raw.githubusercontent.com/techascent/tech.datatype/master/docs/images/noon-conus.png#2019-11-0420:18borkdudemissing-test-assertions:
https://github.com/borkdude/missing-test-assertions
a small library that ... detects missing test assertions#2019-11-0422:29borkdudefound an error in one of my own projects:
https://twitter.com/borkdude/status/1191482400599158785#2019-11-0422:53borkdudeRenamed the project.#2019-11-0501:25Alex Miller (Clojure team)tools.deps.alpha 0.8.578, clj 1.10.1.483 are now available:
* TDEPS-142 - fix for :paths replacement in alias ignored when using :deps replacement in alias - thanks to Vlad Protsenko for the report
* Switched ruby used in brew install to brew's internal ruby - this both reduces variability and may(?) allow the brew install to work on Linux brew (feedback wanted in #tools-deps)
#2019-11-0502:27mauricio.szaboJust published Atom Socket REPL package Chlorine - v0.3.2. Small fixes on the way to parse Clojure forms on the editor, fixed some edge cases and better error treatment when connecting to REPL.
But the biggest feature on this 0.3.x version is: Babashka, Joker, Lumo, Plank and ClojureCLR are now supported! Its possible to connect these REPLs, evaluate forms, and even some autocomplete works (except on Babashka)! Discussions on #chlorine channel.#2019-11-0504:16danielcompton🎉I'm excited to announce that Clojurists Together is funding Expound, Deep Diamond (Neanderthal), libpython-clj, and Oz $9,000 each over the next three months - https://www.clojuriststogether.org/news/q4-2019-funding-announcement/#2019-11-0512:34vlaaad#cljfx 1.6.0 adds significant improvement: Java 8 support! As you might know, JavaFX was previously included in JRE, but starting with JDK 11 it was removed and now is available as separate dependency, incompatible with Java 8. With 1.6.0 update, you can use cljfx both with java 8 and java 11, and correct dependencies are picked up by maven automatically. See updated section in README: https://github.com/cljfx/cljfx#installation-and-requirements#2019-11-0515:33vlaaadIn #cljfx land, CSS stands for Charmingly Simple Styling. This is initial release of https://github.com/cljfx/css — css library for cljfx (and other JavaFX-based applications).#2019-11-0608:04jacekschaethis week on https://clojurescriptpodcast.com clj-kondo with @borkdude#2019-11-0614:37nonrecursiveReleased Specmonstah 2, a library for writing clear and concise test fixtures: https://github.com/reifyhealth/specmonstah#2019-11-0616:09plexusI'm guessing not much has changed since alpha-2?#2019-11-0617:47nonrecursivethat’s right 🙂 just one minor tweak, added additional validation on add-ents#2019-11-0818:48Jakub Holý (HolyJak)"Test" not text I guess :)#2019-11-0820:13nonrecursivelol yes, thank you 🙂#2019-11-0616:20ikitommiHot New Release of Sieppari - a small, fast, and complete interceptor library!
• [metosin/sieppari "0.0.0-alpha8"] (117,963 downloads in clojars partywombat)
• better handling of async exceptions
• dropped implicit support for core.async & manifold -> users need to require sieppari.async.core-async or sieppari.async.manifold to get those
• oob support for java.util.concurrent.CompletionStage, e.g. promesa, manifold, pohjavirta, porsas & co
• https://github.com/metosin/sieppari#2019-11-0616:23richiardiandreaNice! Thank you!#2019-11-0710:38ikitommiThanks! There will one big refactor before a non-alpha release out - more explicit config and an optimizing compiler for kick-ass perf. Might be 1.0.0 directly.#2019-11-0619:29kwladykahttps://github.com/kwladyka/form-validator-cljs
Added clojars deployment in Continuous Deployment. Finally you can easy use library in deps.edn and also lein and boot by release version.
2 good reasons to look on this library:
1) If you need form validation using spec in ClojureScript.
2) If you want to learn how to make Continuous Deployment using github actions and deps.edn to clojars look on this file https://github.com/kwladyka/form-validator-cljs/blob/master/.github/workflows/clojars.yaml and https://github.com/kwladyka/form-validator-cljs/blob/master/pom.xml
Feel free to use my github actions work in your project. It is free in public projects and soon will be official in github. 14 of November or something like that. Now I have access to it as beta tester.
---
Big thanks for @seancorfield for helping me learn how to deploy to clojars ❤️
Also thanks in random order for @alexmiller @vlaaad @lilactown ❤️
I hope I didn’t miss anybody 😱#2019-11-0620:20borkdudeEdamame v0.0.8 https://github.com/borkdude/edamame/releases/tag/v0.0.8
Edamame is a configurable EDN/code parser which attaches location metadata. Follow up in #babashka (which uses this as a lib).#2019-11-0621:47pezEdamame is delicious!#2019-11-0712:59OlicalConjure v2.1.0 is out with support for evaluating a form at any given Neovim mark! https://asciinema.org/a/279763
This means you can evaluate things from other parts of your buffer while you work elsewhere, or even in different files and namespaces!
https://github.com/Olical/conjure - intro guide https://oli.me.uk/getting-started-with-clojure-neovim-and-conjure-in-minutes/#2019-11-0713:10henrikI’m looking forward to the forthcoming idiot->wizard video. 🙂#2019-11-0713:12OlicalHaha, a great name for a training series.#2019-11-0713:13OlicalOr maybe wizard school? I'm guessing Hogwarts has some copyright restrictions 😬#2019-11-0714:49henrikMaybe acolyte->wizard would be better, as “idiot” literally means “person that doesn’t vote” in ancient Greek, and we don’t want to upset any ancient greeks.#2019-11-0714:50OlicalTIL!#2019-11-0714:51OlicalYeah, I wouldn't want to upset anyone or call anyone an idiot. A video series getting people proficient with conjure might be good though. Or more posts on my https://oli.me.uk site#2019-11-0714:55henrikPersonally, I’d be very interested in the nothing-to-REPL-up-and-running scenario, as I’m entirely new to vim, neo or otherwise.
Motivationally, I would find it much easier to learn vim around the REPL than to learn vim in order to get to the REPL, if you know what I mean.#2019-11-0716:06OlicalAh that's very interesting. Maybe a video series / live session for newbies would be good. Like an online follow along session for getting started from nothing with a bunch of plugins and stuff :thinking_face:#2019-11-0714:18dominicmAnnouncing the initial public release of Clip (0.10.0). Clip is a dependency injection library akin to Integrant or Component that requires no modification to existing Clojure code. It works for both Clojure & ClojureScript, Sync & Async, Code & Data. Contributions of all kinds are welcome, at this stage design feedback is still very welcome.
https://github.com/juxt/clip
Discussions in #juxt#2019-11-0714:23vemvCan one create multiple systems with it?#2019-11-0714:24dominicmYeah. Systems are reified, so you can def as many as you like and then start them. The concept of a system isn't a singleton.#2019-11-0714:56timgilbertI'd be curious to see a comparison between this and integrant / mount / component...#2019-11-0714:59pithyless@U09LZR36F README mentions https://github.com/juxt/clip-example -> which is 404#2019-11-0715:00dominicmhttps://github.com/dharrigan/nextjdbc-clip is a for example for now. I need to port the rename to the example :)#2019-11-0715:01dominicm@U08QZ7Y5S there's a handful of references to integrant/component in the rationale, or did you have something else in mind?#2019-11-0715:03timgilbertAh, I see them now, but I missed them on a quick scan. I guess I was looking for a more direct "comparison to other libraries" section. No big deal though#2019-11-0715:04timgilbertLooks cool!#2019-11-0715:05dominicmThat's probably a doc worth writing. I'll open an issue and tag you, if you don't get there first.#2019-11-0715:05vemvA comparison table could be killer
Some points aside from the obvious:
- suspendability
- whether the system is reified (already addressed)#2019-11-0715:06dominicmSuspension is not yet done. But is coming. I think there's an issue for this.#2019-11-0715:24jeroenvandijk@UEM4BH7B3 Since you write that requires no modification to existing Clojure code is the main reason for its existence refactoring legacy applications?#2019-11-0715:52dominicm@U0FT7SRLP not really. Although I think it would be a great fit there. I was frustrated at constantly adapting functions into multi methods and records. If you build granular systems, it's quite frustrating, you end up with 3-line multi methods which defer to a function doing the work.
I wanted to capture the ability to write idiomatic clojure code, the kind I would put in a library without hesitation, and not have to make it aware of a particular state library.
One of the other benefits I was looking for was docstrings, which vars naturally support.
Something I want to explore further is for personal development setups, rather than having a pre-defined dev system. Somehow tying that into minimalistic repl driven development. But that's a major WIP for me.#2019-11-0716:20jeroenvandijk@UEM4BH7B3 Thanks for explaining, make sense! The introduction of async is also interesting. I'm curious how this can be applied#2019-11-0716:24dominicmThe async? We use async in a project to setup re-graph. But that project has a custom system, so I made a new custom system library.#2019-11-0716:33jeroenvandijkMaybe I'm thinking too much from a component perspective. I'll read the documentation better#2019-11-0716:52dominicmThe idea is that when you return something async, dependent components won't have their start called until the async thing is resolved.#2019-11-0716:52dominicmSo the async is transparent.#2019-11-0717:46p-himikAre there any plans to eventually start using it in Edge?#2019-11-0718:01dominicmYeah. It's on my list. Going into the JUXT website next week, so it'll probably be done in parallel#2019-11-0721:42dominicmI've fixed the link to the clip example#2019-11-0811:37dominicmTo clarify, it'll be unofficially supported in edge, but probably won't be documented until I've used it a few times and I'm happy.#2019-11-0811:38borkdudeShip it.#2019-11-0812:51dominicmDocumented a comparison with other libraries https://github.com/juxt/clip#comparison-with-other-libraries feedback welcome on other tabs worth having#2019-11-0818:18cjsauer@U09LZR36F thanks for sharing! Just curious, what is the inspiration for the name “clip”?#2019-11-0818:41dominicm@U6GFE9HS7 In the sense of "to fasten together"#2019-11-0717:10blueberryNew release 0.12.0 available! sheepy sheepy sheepy
https://aiprobook.com/deep-learning-for-programmers?release=0.12.0&source=cslack#2019-11-0801:47yogthosNew release of Domino includes event triggers, interceptors , and improved API based on user feedback. Full change log here:
https://github.com/domino-clj/domino/blob/master/CHANGES.md
Domino also plays nicely with re-frame, see below for example usage:
https://domino-clj.github.io/demo#2019-11-0803:28Candidjoker v0.13.0: https://github.com/candid82/joker/releases/tag/v0.13.0#2019-11-0803:38tony.kayFulcro 3.0.8. This version now includes easier to use support for returning binary values from server mutations (e.g. dynamically generated PDF).
https://github.com/fulcrologic/fulcro#2019-11-0814:07borkdudeclj-kondo 2019.11.07 - Datalog linting and more!
https://github.com/borkdude/clj-kondo/releases/tag/v2019.11.07#2019-11-0814:23borkdudeBlog about Datalog linting by LambdaForge:
https://lambdaforge.io/2019/11/08/clj-kondo-datalog-support.html#2019-11-0902:38tony.kayFulcro 3.0.10 is on Clojars. I’ve added support for easily attaching file uploads into the context of mutations so that the uploads simply appear as part of your normal transaction. There’s a YouTube video that shows the basics: https://youtu.be/Tab_6JWOxSQ#2019-11-0903:52CrispinBootleg 0.1.5 is released. With selmer support, enlive macros, filesystem functions like globbing, better error messages and builds for linux, mac and windows
https://github.com/retrogradeorbit/bootleg#2019-11-0910:21borkdudeAdded to https://github.com/lread/clj-graal-docs/blob/master/doc/external-resources.md
Feel free to add any information you found useful to know when working on your project.#2019-11-0912:32Crispinwill do. I do have some things to add.#2019-11-0912:46borkdudePlease do 🙂#2019-11-0912:55CrispinPR sent#2019-11-0913:00borkdudemerged 🙂#2019-11-1118:29borkdudemissing.test.assertions v0.0.2:
https://github.com/borkdude/missing.test.assertions
adds :throw? option#2019-11-1121:17borkdudeBabashka v0.0.26 released. Now with clojure.data.csv!
https://github.com/borkdude/babashka/releases/tag/v0.0.26#2019-11-1322:59borkdudeVersion v0.0.27 is now released as well:
https://github.com/borkdude/babashka/releases/tag/v0.0.27#2019-11-1222:16Alex Miller (Clojure team)org.clojure/core.async 0.5.527 is now available#2019-11-1222:16Alex Miller (Clojure team)core.async 0.5.527 is now available.
In general, you should never directly or indirectly use blocking IO operations in go block threads. The go block threads are a fixed pool of (by default 8) threads. If you block enough of these threads, you lock up the pool, potentially in unrecoverable ways.
This release contains a new Java system property (intended primarily for development use) that will throw if core.async blocking operations (anything ending in "!!") are used in a go block. The exception will be thrown in a go block thread which by default will bubble up to the ThreadGroup's uncaught exception handler and get printed to stderr. You can also set Thread.setDefaultUncaughtExceptionHandler() if you want to do something else. Note that this only catches one set of blocking calls, other blocking IO is equally as problematic and will not be caught with this flag.
Example:
clj -J-Dclojure.core.async.go-checking=true
user=> (require '[clojure.core.async :as a])
nil
user=> (def c (a/chan 10))
#'user/c
user=> (a/go (a/>!! c 100))
#object[clojure.core.async.impl.channels.ManyToManyChannel 0x77a14911 "
When running source from a file, the NO_SOURCE_FILE lines will point to the offending file and line performing the blocking operation (here those on the REPL).
Additionally, the pipeline api call has been modified, both to respect the policy above and to address issues with reusing the go block thread pool for pipeline concurrency (capped by go block thread pool size).
The api docs have been regenerated:
https://clojure.github.io/core.async#2019-11-1222:19borkdudeThat's a great feature, thanks.#2019-11-1223:15roklenarcicI think it would be fair to say that any go block should not do significant work and should quickly get to an IOC operation to release the thread it’s using#2019-11-1300:03hlshipMy rule of thumb is thread to do work go to do orchestration.#2019-11-1307:47jacekschaeClojureScript Podcast out until 2020 https://soundcloud.com/user-959992602/s2-e11-out-until-next-year#2019-11-1310:18mirohi guys! A new release of titanoboa (0.8.1) is now available. Most notable changes:
- Simplified API for Webhooks - this makes it easier to use Titanoboa as a full-blown iPaaS, e.g. as a Zapier alternative 🚀
(read more on wiki https://github.com/mikub/titanoboa/wiki/API-Documentation#start-job-via-a-webhook-simplified-api )
- bug fixes - a bug in file upload and also a bug in GUI's code auto-complete are now fixed
https://github.com/mikub/titanoboa#2019-11-1322:04kipzhttps://clojars.org/com.taoensso/faraday/versions/1.10.0#2019-11-1503:41seancorfieldseancorfield/next.jdbc {:mvn/version "1.0.10"} -- The next generation Clojure wrapper for JDBC-based database access -- https://github.com/seancorfield/next-jdbc -- all follow-up to #sql please!
Enhancements:
* Fix #75 by adding support for java.sql.Statement to plan, execute!, and execute-one!.
* Fix #73 by providing a new, optional namespace next.jdbc.date-time that can be required if your database driver needs assistance converting java.util.Date (PostgreSQL!) or the Java Time types to SQL timestamp (or SQL date/`time`).
* Address #70 by adding CLOB & BLOB SQL Types to the Tips & Tricks section of Friendly SQL Functions and by adding next.jdbc.result-set/clob-column-reader and next.jdbc.result-set/clob->string helper to make it easier to deal with CLOB column data.
Documentation:
* Fix link to All The Options in Migration from clojure.java.jdbc. PR #71 (@laurio).
* Clarify what execute! and execute-one! produce when the result set is empty (`[]` and nil respectively, and there are now tests for this). Similarly for find-by-keys and get-by-id.
* Add MS SQL Server section to Tips & Tricks to note that returns an empty string for table names by default (so table-qualified column names are not available). Using the :result-type (scroll) and :concurrency options will cause table names to be returned.
* Clarify that Friendly SQL Functions are deliberately simple (hint: they will not be enhanced or expanded -- use plan, execute!, and execute-one! instead, with a DSL library if you want!).
* Improve migration docs: explicitly recommend the use of a datasource for code that needs to work with both clojure.java.jdbc and next.jdbc; add caveats about column name conflicts (in several places).
* Improve datafy/`nav` documentation around :schema.
Miscellaneous:
* Address #74 by making several small changes to satisfy Eastwood.
* Update org.clojure/java.data to "0.1.4" (0.1.2 fixes a number of reflection warnings).#2019-11-1610:55borkdudebabashka, a native scripting tool for Clojure, v0.0.28:
https://github.com/borkdude/babashka/releases/tag/v0.0.28
Java interop support via reflection.#2019-11-1622:26borkdudev0.0.29 adds binding, with-out-str and with-in-str#2019-11-1620:07blueberryIn case anyone is interested in this preview, here's the link for my ClojureConj 2019 slides: https://dragan.rocks/talks/ClojureConj2019/ipai.html#2019-11-1721:15mauricio.szaboJust published a new version of Atom package Chlorine, and on this version there's support for an (experimental!) copy to clipboard command on evaluation results.
It also adds preliminary suport for Arcadia REPL, and fixes some problems with rendering 🙂#2019-11-1817:00Ivan FedorovVideos from the Russian Clojure conference, featuring:
- Niqola Ryzhikov – Test front on the back. clj, cljs, re-frame + some engineering thoughts
- Vlad Bokov – Hacking on clojure.core & runtime
- Ivan Grishaev – Datalog on top of SQL
- Mike Ananev (Sberbank) – Data ecosystems. Data-driven approach to build a B2B metadata system.
- Lev Rasskazov - Managing stateful objects and dependencies between them
- Alexey Kudryavtsev (Arrival) - Versioning in Datomic: Beyond History API
https://youtube.com/playlist?list=PLvf-wiCQYkAVvrZr53Upxti9Hr3t7V4bW#2019-11-1817:13Ivan FedorovJoin us next October! Moscow is full of nice places, well worth making a visa.
We’ll make sure you’re warmly welcome 🙂#2019-11-1915:01yogthosnew Domino is out with async events and triggers for generating inputs via effects https://github.com/domino-clj/domino/blob/master/CHANGES.md#2019-11-1916:43Alex Miller (Clojure team)ClojureScript 1.10.597 is now available! https://clojurescript.org/news/2019-11-18-release - Node REPL improvements, Google Closure JS analysis, enhanced type#2019-11-1917:53pez> Google Closure JS analysis
I saw that demoed on Apropos yesterday. Super mega awesome!#2019-11-2000:21plexusI can't find anything in the changelog about Node REPL improvements. Am I missing something?#2019-11-1922:44carocadParcera v0.4.0 is out now using Antlr4 instead of Instaparse for upmost performance. Please check the release notes for specifics: https://github.com/carocad/parcera/releases/tag/v0.4.0#2019-11-2001:05dominicm@U04V15CAJ release notes contain benchmarks 🙂#2019-11-2007:59borkdudeThat’s more in the balllpark of tools.reader based solutions #2019-11-2008:07borkdudeNice work @U0LJU20SJ !#2019-11-2008:55carocad@U04V15CAJ @U09LZR36F it would be interesting for me to know how you guys are using such parsers. I think that parcera can be even faster by avoiding the conversion to clojure lazy seqs. Any hints on your use cases 🙂 ?#2019-11-2008:57borkdude@U0LJU20SJ I'm using rewrite-clj for parsing in clj-kondo#2019-11-2008:58borkdudeAnd edamame in https://github.com/borkdude/sci and https://github.com/borkdude/babashka/
So two use cases for me: analysis and execution (which also involves analysis)#2019-11-2009:03carocadI meant it a bit more specific 😅 . so rewrite-clj uses a zipper right ? do you modify the structure inline pass it forward or do you perform some side effects while traversing it ?#2019-11-2009:21borkdudeI don't use the zipper part from rewrite-clj for processing#2019-11-2009:24borkdudeI do use side effects while processing#2019-11-2010:38carocad> I do use side effects while processing
interesting. I am thinking of making an api for looping through the ast without building a collection which should make parcera even faster. If you could help me sketch it out (github issue) it would be an awesome help 🙂#2019-11-2010:42borkdudebtw, does parcera also attach location metadata?#2019-11-2010:44borkdudebtw, I see antlr4 also supports generating a JS target:
https://github.com/antlr/antlr4/blob/master/doc/javascript-target.md#2019-11-2011:20borkdudeas for the API, you could support a visitor function, that gets to see every parsed node in the tree? I don't know exactly what it would look like.
just try to build an app like a linter or evaluator and you will quickly discover what is needed probably#2019-11-2011:21borkdudemaybe the visitor function would also need to see the parent or children in some cases, so I don't know if side-effect only without the tree works for all cases#2019-11-2012:43borkdude@U0LJU20SJ The best way to discover what works is building actual tools with it.#2019-11-2012:48borkdudebtw, when trying out parcera 0.4.0 I get:
$ clj -Sdeps '{:deps {carocad/parcera {:mvn/version "RELEASE"} org.antlr/antlr4-runtime {:mvn/version "4.7.1"}}}'
Clojure 1.10.1
user=> (require '[parcera.core])
Syntax error (ClassNotFoundException) compiling at (parcera/antlr/java.clj:1:1).
parcera.antlr.ClojureParser
user=>
#2019-11-2013:04carocad@U04V15CAJ you need to add antlr-runtime to your deps. See usage: https://github.com/carocad/parcera#usage#2019-11-2013:04borkdudeI did, see my :deps#2019-11-2013:05borkdudemaybe your dependency has to package compiled classes?#2019-11-2013:05borkdudeit expects the class parcera.antlr.ClojureParser to be around, which doesn't seem to be in your dep#2019-11-2013:05carocadoh sorry my mistake. It seems that the generated ClojureParser from antlr was not packed :thinking_face: ? I thought that leiningen takes care of that by using the java-sources#2019-11-2013:06borkdudeonly if you call the javac task#2019-11-2013:06borkdudeminor issue: the README still refers to instaparse#2019-11-2013:07carocad> btw, does parcera also attach location metadata?
yes
> btw, I see antlr4 also supports generating a JS target:
yeah, I havent been able to get it working, see https://github.com/carocad/parcera/issues/25#2019-11-2013:07borkdudemajor issue:
:java-source-paths ["src/java"]
this path doesn't seem to be present in your git repo#2019-11-2013:09carocadthose are automatically generated files, therefore I dont include them in the git history. However it is present when building https://github.com/carocad/parcera/blob/master/.travis.yml#L19#2019-11-2013:11borkdudeok well, maybe it's good to add that to the README then, how to build this stuff#2019-11-2013:14borkdudeis the problem with JS that you do manage to build the JS file, but you don't get it to work with CLJS?#2019-11-2013:14carocadI will take a look at the missing java class. I suspect that publishing is missing the java files … even though I would expect an error if that was the case :thinking_face:#2019-11-2013:15borkdudelike I said, you need the javac task:
javac Compile Java source files.#2019-11-2013:15carocad> is the problem with JS that you do manage to build the JS file, but you don’t get it to work with CLJS?
yes, when passing the generated js files through closure compiler they “get damaged” and importing doesnt work anymore. Might be my lack of knowledge though#2019-11-2013:16borkdudeok, don't know about :module-type :es6, have you tried without that setting?#2019-11-2013:17borkdudecompile probably doesn't do what you think it does, it AOTs Clojure code, it's not related to Java sources#2019-11-2013:34carocad> ok, don’t know about :module-type :es6, have you tried without that setting?
yeah, I tried the other module types and it also didnt work#2019-11-2013:35borkdudewhat if you don't specify a module type, I meant?#2019-11-2013:35carocadI didnt try that 😅 . Will do after I fix the java version 😉#2019-12-0216:33mauricio.szaboI'm also interested on this change! Currently I use rewrite-cljs to parse source files, but it is kinda slow, so I'm hoping these improvements will be handy for my projects :)#2019-12-0313:23carocad@U3Y18N0UC if you have some experience with js -> cljs I am looking for help 🙂 . I am not that experience on it but I do have a branch with a prototype that works on js but not on cljs. Any help is more than welcome#2019-11-2020:56carocadnew release of parcera v0.4.2 fixes a java compilation bug. Thanks a lot to @borkdude for the report and clear insights 🙂
https://github.com/carocad/parcera#2019-11-2021:20borkdudeSeems to work now. The location metadata seems a bit off though?
user=> (p/ast ":foo")
(:code (:simple_keyword "foo"))
user=> (second (p/ast ":foo"))
(:simple_keyword "foo")
user=> (meta (second (p/ast ":foo")))
#:parcera.antlr.java{:start {:row 1, :column 0}, :end {:row 1, :column 1}}
#2019-11-2021:21carocadinteresting, I did encounter a similar problem before but I was pretty sure I fixed it. I guess I need to add more tests 😅#2019-11-2021:22pezCongrats to the release! I’m sorry I haven’t looked at the ClojureScript parts. Just too busy with Calva stuff.#2019-11-2021:23carocadno worries, @U0ETXRFEW it is a contribution not an obligation 😉#2019-11-2021:47carocad@borkdude you are a bug hunter … you just led me to discover another error in my understanding of antlr 🙂. I will push a fix soon#2019-11-2021:55borkdudebabashka v0.0.33: built-in SSL support due to upgrade to GraalVM 19.3.0
https://github.com/borkdude/babashka/releases/tag/v0.0.33#2019-11-2114:22Alex Miller (Clojure team)clj 1.10.1.489, tools.deps.alpha 0.8.599
* TDEPS-143 - Fix: use aliases when generating pom with -Spom
* TDEPS-127 - Add: include pom resource directories in dep paths in -Spom (thanks Miikka Koskinen)
* TDEPS-140 - Add: support for Maven server HTTP header properties (thanks Arne Brasseur)
* Fix: Use of multiple aliases in Windows clj script
* Add -Strace for debugging dep expansion#2019-11-2114:32GeromeI created a channel where people can ask the community, if they are looking for a specific library. Drop by and find your library. #find-my-lib#2019-11-2212:39miroHappy Friday! Just wrote a new blog post: Using Titanoboa as an open source alternative to Zapier
As usual, feedback is welcome!
https://www.titanoboa.io/using-titanoboa-for-cloud-integration.html#2019-11-2219:41Michaël SalihiA simple project using Shadow-CLJS with p5.js (JavaScript library for creative coding) https://github.com/PrestanceDesign/p5-shadow-cljs#2019-11-2315:25tony.kayI’ve started exploring what it would take to build rapid-application development tools in Fulcro. It turns out the answer is “not much” 🙂 Check out this video and repo to see where I’ve gotten in just 4 days of CDD (conference-driven development):
https://github.com/fulcrologic/fulcro-rad
https://youtu.be/jkx9F-RIFiY
I don’t have time to completely build this out by myself, but I’ve already seen significant excitement from people that have seen it. Let me know if contributing might interest you. Think “Generate a web-based, React Native (or perhaps even Desktop) application in a day that supports autogenerated forms, reports, and auth.” All while not tying you to big hairballs 😉#2019-11-2511:42Jakub Holý (HolyJak)Cool! BTW, have you looked at https://github.com/hodur-org/hodur-engine? Its goal is
> you can define your domain model as data, parse and validate it, and then either consume your model via an API
so there is some overlap and perhaps some lessons to learn...#2019-11-2516:30tony.kayAlready suggested…see #fulcro#2019-11-2316:30borkdudeclj-kondo v2019.11.23: detect unused imports, a working Windows binary and a couple of improvements/bugfixes.
https://github.com/borkdude/clj-kondo/releases/tag/v2019.11.23#2019-11-2322:36Filipe SilvaHi all 👋 I've just released v0.3.0 of create-cljs-app that includes a setup using devcards together with react testing-library.
I'd love feedback on the user experience, file structure, and cognitive overhead of extra files in the devcards setup. If you have ideas on how these aspects could be improved let me know!
You can make an new app with the new template using via yarn create cljs-app my-app or npx create-cljs-app my-app.#2019-11-2413:13carocadparcera v0.5.0 released with (yet another) performance improvement by using datafy.
https://github.com/carocad/parcera#2019-11-2415:23Alex Miller (Clojure team)org.clojure/tools.deps.graph - a new tool for making deps diagrams from deps.edn files https://github.com/clojure/tools.deps.graph#2019-11-2415:27Jacques DesmaraisHi Alex, newbie question, but would this work for ClojureScript projects too?#2019-11-2415:50borkdude@UQHRWDGJW As long as the deps are managed by tools.deps what's the difference?#2019-11-2415:58Jacques DesmaraisThanks for your reply @U04V15CAJ, though I’m so new, I have no idea (re: what’s the difference). 😉 I am running into an issue when trying out this tool, and am not getting any answers when googling, so I’ll post the issue in the #beginners section.#2019-11-2416:00borkdude#tools-deps might also work#2019-11-2517:28Alex Miller (Clojure team)@UQHRWDGJW yep, should work!#2019-11-2517:32Jacques DesmaraisThanks @U064X3EF3, BTW I ran into the issue where running clj -A:graph gave me the error Cannot run program "dot": error=2, No such file or directory and someone pointed out that it was probably because I was missing an installation of graphviz, since my setup is so new. Would you like me to open an issue regarding this or, if this is indeed a dependency for tools.deps.graph, then should it be mentioned in the main readme?#2019-11-2517:33borkdude@UQHRWDGJW It says this in the README:
> tools.deps.graph uses Graphviz to generate images. You can find a list of platform-specific installations at https://graphviz.gitlab.io/download/.#2019-11-2517:33borkdudeadded 3 hours ago 🙂#2019-11-2517:34Jacques Desmaraisoh LOL :thumbsup:#2019-11-2517:03yogthosClojure/north 2020 is happening from June 25th to 26th 🎉 https://clojurenorth.com/#2019-11-2517:24Alex Miller (Clojure team)send me a pr for http://clojure.org event!#2019-11-2517:53borkdude@UE21H2HHD Closer than ClojureD 🙂#2019-11-2517:56lreadha! maybe I should start training now! 🚴#2019-11-2518:37yogthos@U064X3EF3 oh yeah, will do thanks for the reminder!#2019-11-2518:59carmen@U064X3EF3 PR is here 🙂 https://github.com/clojure/clojure-site/pull/436#2019-11-2518:15chrisnBig improvements to libpython-clj:
• Stack based scoping - https://github.com/cnuernber/libpython-clj/blob/master/docs/scopes-and-gc.md
• Major stability fixes (mainly thanks to testcases found in production) #2019-11-2601:12Alex Miller (Clojure team)clj 1.10.1.492 is now available - only change is a fix to the clj tool to the conditional logic for tracing that caused a trace.edn file to be written when it wasn't asked for#2019-11-2616:41dchelimskyCognitect Labs' aws-api 0.8.408 is now available! https://groups.google.com/forum/#!topic/clojure/yRAr6e9kAoE#2019-11-2713:38borkdudebb, a native scripting tool for clojure, 0.0.35, small update, add support for namespaces:
https://github.com/borkdude/babashka/releases/tag/v0.0.35#2019-11-2715:11tony.kayFulcro 3.0.11 is on clojars. This version has various performance improvements, and a few other touch-ups. If you notice rendering regressions, please report them.
https://github.com/fulcrologic/fulcro#2019-11-2815:16mauricio.szaboJust published Chlorine, Atom package for Socket REPL. On this version, fixes on "copy result to clipboard". Discussions, ideas, help on #chlorine channel 🙂.#2019-11-3009:23valeraukoi couldn't find any helper to test ex-info throws so i made one https://github.com/valerauko/harinezumi#2019-11-3017:11pezNew Calva out. Major rewrite of its Paredit implementation. https://clojureverse.org/t/calva-paredit-just-got-majorly-better/5155#2019-12-0517:47Clémentcongrats and thanks for your hard work 🙂#2019-12-0519:04pezThanks!#2019-12-0111:41borkdudeThere is a new way of running clj-kondo in IntelliJ which also works with the community edition:
https://github.com/borkdude/clj-kondo/blob/master/doc/editor-integration.md#lsp-server#2019-12-0212:37p-himikThe LSP workflow doesn't require saving a file before running the linter on it, right?
Would it be possible to run the LSP server via clj just so that I can add the RELEASE version to my user's deps.edn and stop worrying about the latest version?#2019-12-0213:13borkdude@U2FRKM4TW good idea. Can you try with:
/usr/local/bin/clojure -Sdeps '{:deps {clj-kondo/lsp-server {:mvn/version "RELEASE"} clj-kondo {:mvn/version "RELEASE"}}}' -Sforce -m clj-kondo.lsp-server.main#2019-12-0213:13borkdudeas the command#2019-12-0213:13borkdude(I think you need -Sforce else to checking of the latest release)#2019-12-0213:14borkdudeIf that works for you, I'll add it to the README#2019-12-0213:52p-himikSeems to work, but I had to increase the init timeout to a minute. Otherwise, I was getting
LanguageServer for definition
rawCommand : /usr/local/bin/clojure -Sdeps '{:deps {clj-kondo/lsp-server {:mvn/version "RELEASE"} clj-kondo {:mvn/version "RELEASE"}}}' -Sforce -m clj-kondo.lsp-server.main
not initialized after 10s
Check settings
So, I'm not sure about the -Sforce flag. I think with RELEASE, clojure still checks for the latest version.
Although, even if you don't specify the flag, the timeout will still probably happen when a new version of clj-kondo is released. Maybe it's worth mentioning the timeout and how to increase it.
Another small thing - the guide says the path to the relevant settings section is just at Preferences / Language Server Protocol / Server definitions. The actual path, as given by IDEA itself, is File | Settings | Languages & Frameworks | Language Server Protocol | Server Definition (you can copy it via the context menu of the breadcrumbs section of the settings window).#2019-12-0213:55borkdudeAre you on Windows?#2019-12-0213:55p-himikUbuntu.#2019-12-0213:55borkdudeThat might be a difference between mac and linux#2019-12-0213:55p-himikHmm, yeah - didn't realize that.#2019-12-0213:55p-himikSo you don't have the Languages & Frameworks part?#2019-12-0213:56borkdudeThe uberjarred version has faster startup. Can you confirm that by trying it?#2019-12-0213:56p-himikOh yeah, it's definitely faster.#2019-12-0213:56borkdudeoh yes, I do. I will correct it.#2019-12-0213:57borkdudeok, then I think that will still be the recommended way#2019-12-0213:57borkdudebut if you make a bash script that downloads the latest one and just replaces the existing by the same name, then you should have what you want#2019-12-0213:58borkdudealmost#2019-12-0213:58p-himikThere are pros and cons to each way of setting this up, I guess. One gives faster startup, although it happens only once at IDEA startup; the other is able to download the latest version for you but requires an additional tuning of the init timeout value.#2019-12-0213:58p-himikRegarding the script - well, if download takes a long time, it will be the same issue.#2019-12-0213:59p-himikclj is slow only when it needs to recompute the classpath. Without the -Sforce flag, the timeout doesn't happen.#2019-12-0214:00borkdudeyes, but the cache is based on a hash of the deps.edn file I think#2019-12-0214:00borkdudeI already had a caching issue when using RELEASE#2019-12-0214:00borkdudethat's why you need -Sforce to make it work reliably#2019-12-0214:01borkdudeofficially RELEASE isn't even supported anymore by a future version of maven#2019-12-0214:01p-himikHuh, interesting. I'll keep an eye on it then. Because I'm almost certain that I've seen it download a new version all by itself when I didn't change the deps file.#2019-12-0214:02p-himikThe absence of RELEASE in Maven isn't really relevant for tools.deps because, I think, it doesn't use Maven. RELEASE can just be a spepcial value for the :mvn/version key. But that's a topic for a different discussion. 🙂#2019-12-0214:09borkdudeyes, but the cache depends on the contents of the deps.edn file#2019-12-0214:09borkdudeand RELEASE is just a constant string#2019-12-0214:09borkdudeanyway, feel free to use it with -Sforce, I just added it because I did have a caching problem just now when I came up with this solution#2019-12-0214:31p-himikAh, almost forgot to say - thank you for making this workflow possible. Using the file watcher was creating just too much churning.#2019-12-0214:35borkdudeSure 🙂#2019-12-0216:20p-himikI just noticed that this folder got created:
lsp
├── conf
│ └── clojure.json
└── log
├── clojure_err_20191202.log
└── clojure_out_20191202.log
The JSON file is empty. I couldn't find any reference to it in the source code of clj-kondo.
Where does it come from? Can I safely add the whole folder to gitignore?#2019-12-0216:21borkdudeI think that is created by the LSP Support plugin.#2019-12-0216:21borkdudeI saw it too on my machine#2019-12-0216:21borkdudemaybe you can find something about it in their docs#2019-12-0216:21borkdudeI added it to .gitignore#2019-12-0216:30p-himikThanks! Yeah, they explicitly say that they create the lsp folder in the project's root.#2019-12-0308:54p-himikJust to correct myself - turns out, the LSP server shuts down each time you close all relevant files, not when you exit IDEA. In this situation, having a high init time is indeed much more detrimental.#2019-12-0309:04borkdudeI think so too.#2019-12-0115:21athomasoriginalWrote a little something about starting with Clojure Text Editors and how one might choose between all the options available: https://betweentwoparens.com/clojure-text-editors#2019-12-0115:22athomasoriginalThoughts are very welcome 🙂#2019-12-0115:35vemvNice one, nuanced.
Emacs user here, but I celebrate diversity of choices, particularly to accomodate people coming from different backgrounds.
As a random thought, I'd love for people to champion IDE-agnostic tooling. I often see people asking "how do I format|refactor|grep in $editor", when a better approach would be "how to x from the REPL"
https://github.com/clojure-emacs/refactor-nrepl is perfectly invokable from the repl for example, and yet probably 90% of its userbase are emacs users.#2019-12-0115:39athomasoriginal100% agreed @U45T93RA6! I think building a culture of education and understanding goes a long way to getting to your point 🙂#2019-12-0115:47vemvExactly :)
More broadly, Clojure / Lisps have ways that are deeply different from practically all other mainstream languages.
So ones sees the frequent mistake of people doing clj software engineering the same exact way they would in Ruby, or Java...
That's pretty wrong, but at the same time one ought to demonstrate some patience and empathy.#2019-12-0116:51ghadiThat’s a brilliant domain name#2019-12-0123:07mauricio.szabo@U45T93RA6 one of the things I think is missing is documentation. If we could document these features better, it would probably be easier for people to invoke then from the REPL, and also easier to integrate on editor's plug-ins too#2019-12-0120:17CandidJoker v0.14.0 is released: https://github.com/candid82/joker/releases/tag/v0.14.0#2019-12-0123:05mauricio.szaboJust published Clover. It is a very experimental package for Socket REPLs on VSCode, based on the same machinery that powers Chlorine (for Atom): https://marketplace.visualstudio.com/items?itemName=mauricioszabo.clover#2019-12-0200:44pezVery cool! I must try it of course. Do you know how compatible the extension is with Calva? I’m thinking since there is a lot of general Clojure editing things in Calva, it would be nice if Clover users could benefit from them. I’ll give Clover some spins and see what I find.#2019-12-0201:08mauricio.szaboI didn't check this compatibility, but it should work fine. Clover does not have any editing, so it would really be nice to benefit from it 🙂#2019-12-0206:20andy.fingerhutTranscripts of two of Rich Hickey's oldest (and longest) talks are now published and available, included in a collection of many other talk transcripts. The newest transcripts are (1) "Clojure Concurrency" from March 2008, where he introduced the fairly well known "ant colony" simulation program to demonstrate refs, transactions, and agents, here: https://github.com/matthiasn/talk-transcripts/blob/master/Hickey_Rich/ClojureConcurrency.md . and (2) "Clojure for Java Programmers" from June 2008, here: https://github.com/matthiasn/talk-transcripts/blob/master/Hickey_Rich/ClojureForJavaProgrammers.md . That Github repository contains many other talk transcripts. If you are interested in helping create additional transcriptions, I am happy to help edit/polish them if someone wants to volunteer creating a first draft of all or even part of another talk. Offer your time and coordinate efforts on any of the open Github issues for not-yet-transcribed talks in that same Github repo.#2019-12-0207:11LuPublished a cljs library for on scroll animations sheepy
https://github.com/luciodale/aqua#2019-12-0216:08blueberryNew book release 0.13.0 available! sheepysheepysheepy
https://aiprobook.com/deep-learning-for-programmers?src=rslack&release=0.13.0#2019-12-0221:43paulbutcherI’ve just published a clj template for for an Electron application built with deps.edn, Figwheel Main, Reagent, and test integration via cljs-test-display.
https://github.com/paulbutcher/electron-app#2019-12-0300:55hlshipDo you have a thread to discuss this? I'm having some trouble but don't want to spam announcements.#2019-12-0309:38paulbutcherI don’t, but feel free to create a thread on either the #clojurescript or #figwheel-main channels (whichever you feel might be most relevant) and mention me…#2019-12-0223:01DumchMade a pwa app example in Clojure https://github.com/Liverm0r/PWA-clojure#2019-12-0315:00Alex Miller (Clojure team)tools.analyzer.jvm 0.7.3 is available with deps bumped to latest tools.reader, core.memoize etc#2019-12-0316:31Alex Miller (Clojure team)core.async 0.6.532 is also available, with bumped dep to latest tools.analyzer.jvm#2019-12-0318:39otfromAlways happy to see core.async get some ♥️#2019-12-0319:24Alex Miller (Clojure team)I am work on a bunch of docs for it (better late than never, right?)#2019-12-0409:42otfromthat is awesome. It would be good to get more of a steer on good ways of using it. I'm mostly using it for conveyor belts of data to different reducing functions, but not for concurrency when doing data processing. The place I use it for concurrency is when doing UI work.#2019-12-0413:12Alex Miller (Clojure team)Sounds right to me#2019-12-0414:07otfrom🎊 😄 🎊#2019-12-0409:35CrispinBootleg 0.1.6 released: Support for reagent style hiccup like {:style {:margin-top "8px"}} and nil forms. Better error messages. And various bug fixes.
https://github.com/retrogradeorbit/bootleg#2019-12-0510:09skuroDutch Clojure Days, the free yearly conference of Clojure enthusiasts and practitioners in the Netherlands, is scheduled to happen in Amsterdam on Saturday, May 16th. You can already register your spot (https://www.eventbrite.com/e/dutch-clojure-day-2020-tickets-85069363757) or participate to the CFP (https://www.papercall.io/dcd20)#2019-12-0515:48chadhsI took the plunge and launched my little web app today. If you want to check it out you can here: https://www.readitnever.app
Per the advices of beginners chat I also posted here: https://www.reddit.com/r/Clojure/comments/e6iyfd/launched_my_first_real_web_app_today_written_in/#2019-12-0517:55Bingen Galartza Iparragirrehttps://github.com/magnetcoop/object-storage.ftp
We just released a library that provides an Integrant key for managing objects in FTP servers. Perfect for Duct environments, but it can also be used without it.#2019-12-0600:52yogthosDeveloper Economics Q4 2019 Survey could use some Clojure 🙂 https://www.developereconomics.net/?member_id=9QXmXyAv#2019-12-0609:56imredid it this morning but the only question where Clojure was on-topic was a "what lang do you use" type of thing where I had to supply it as Other, please specify. Disappointed#2019-12-0616:05Piotr RoterskiThere’s also a fairly popular https://survey.stateofjs.com/ closing soon which has Clojurescript explicitly listed as one of js flavours.#2019-12-0618:32walterlSignup required to take a survey? Hard pass.#2019-12-0602:01weiI wrote a tool to generate secret santa pairings: https://github.com/yayitswei/santa. feedback welcome!#2019-12-0612:30plexusClojureVerse is momentarily down. The last discourse upgrade didn't complete correctly so I'm doing a manual upgrade and restart. We should be back shortly, thank you for your patience.#2019-12-0612:42plexusand we're back#2019-12-0711:08otfromhugops#2019-12-0621:21mauricio.szaboJust published a new version of Atom editor's socket REPL package Chlorine. On this version, some changes on showing documentation on vars (it is now showing the spec information). It also organize things better so it'll be easier to integrate with orchard in the future. Discussions on #chlorine channel 🙂#2019-12-0801:39seancorfieldexpectations/clojure-test {:mvn/version "1.1.2"} -- clojure.test-compatible version of Expectations -- bug fix for (expect result-map (in larger-map)), adds (expect (between 10 20) test-expression), multi-version test suite (Clojure 1.8 and later; (expect ::my-spec test-expression) requires Clojure 1.9 or later), improved documentation <https://cljdoc.org/d/expectations/clojure-test/1.1.2> -- follow-up on #expectations#2019-12-0817:05DumchJust written an article about using both Spacemacs and Intellij at the same time
https://www.reddit.com/r/Clojure/comments/e7vvmy/idea_or_emacs_or_both_for_a_vim_user/#2019-12-0820:57uochanI released a small configuration management tool named "daddy"!
https://github.com/liquidz/daddy
Special thanks to @borkdude for developing sci !#2019-12-0909:51seancorfieldexpectations/clojure-test {:mvn/version "1.2.1"} -- clojure.test-compatible version of Expectations -- all new documentation https://cljdoc.org/d/expectations/clojure-test/1.2.1/doc/readme -- several enhancements https://cljdoc.org/d/expectations/clojure-test/1.2.1/doc/changes -- follow-up on #expectations (expect a lot more activity on this library going forward!)#2019-12-0913:50athosI’ve just published Postmortem, a tiny value-oriented debugging tool for Clojure(Script)! https://github.com/athos/postmortem
• Postmortem is heavily inspired by scope-capture and miracle.save, but focuses more on “postmortem debugging” as its name suggests.
• Integration with transducers enables various flexible logging strategies
• Instrumentation on vars makes it easier to debug functions without touching their code
• Supports Clojure/ClojureScript/self-hosted ClojureScript
If you’re interested, give it a shot! Any feedback is welcome.#2019-12-0914:04vemvInteresting!
Perhaps a Rationale section would help, explaining how it compares to alternatives
(I see that hinted in Features, but still... ^^)#2019-12-0914:22Filipe SilvaI was looking for something of this sort, although now I know scope-capture also existed#2019-12-0914:22Filipe Silvapostmortem seems more full featured though#2019-12-0914:23Filipe Silvaand also seems to have a bit more focus on working with cljs#2019-12-0914:25Filipe Silvathe instrumentation bit also looks right like what I really wanted#2019-12-0914:34athos@U45T93RA6 Hi, thanks! Yeah, I admit the current document is still hard to grasp what the library does really aim at, so I’ll try to improve it sometime soon.
@UJVKWJTGE Thank you for the feedback! I hope it’ll be useful for your use case.#2019-12-1301:15val_waeselynck@U0508956F Hello, scope-capture's author here (thanks for mentioning it, I'm glad it gave you some inspiration!)
I don't see much overlap between both libraries. scope-capture is above all about recreating the context of your code and projecting your REPL into it, and really not much about dealing with saved values. As such, Postmortem seems more akin to tracing debuggers, like tools.trace or Sayid (which is also very feature complete!).
@UJVKWJTGE: FYI scope-capture does work with ClojureScript.#2019-12-1301:21val_waeselynckMight want to add Postmortem to the Clojure Toolbox! https://www.clojure-toolbox.com/#2019-12-1301:24val_waeselynckAlso, I think not everyone knows about this, but there's a section about debugging in the REPL guide on http://clojure.org, it might be useful as an overview of the available options: https://clojure.org/guides/repl/enhancing_your_repl_workflow#debugging-tools-and-techniques#2019-12-1307:20athos@U06GS6P1N Hi, thanks for your suggestions! Yes, I know the Clojure Toolbox, but I thought for no reason that it’s not actively maintained anymore. I will file a PR for Postmortem later 😉#2019-12-1307:22athos> I don’t see much overlap between both libraries. scope-capture is above all about recreating the context of your code and projecting your REPL into it, and really not much about dealing with saved values.
Once you save a local context as data, you can freely use that data later. Evaluating an expression in a reproduced context is one of the use cases for the saved data. Although Postmortem does not provide dedicated APIs for that, it could be done with relatively small effort using the existing APIs for most simple cases.
For example, the last expression in the following code effectively works like scope-capture’s letsc:
(require '[postmortem.core :as pm])
(defn sum [n]
(loop [n n sum 0]
(pm/dump :sum)
(if (= n 0)
sum
(recur (dec n) (+ sum n)))))
(sum 10) ;=> 55
;; This evaluates (+ sum n) with the local context of the 7th iteration
(let [{:keys [sum n]} (-> (pm/log-for :sum) (nth 7))]
(+ sum n))#2019-12-1311:40Filipe Silvadidn't know about that section, but unfortunately tools.trace doesn't seem to support cljs and that's one of the most useful ones I feel 😞#2019-12-1311:43Filipe Silvain fact, in clojure-toolsbox I see that scope-capture is the only debugging tool marked as cljs even#2019-12-1315:14val_waeselynck@U0508956F some would argue that for the most simple cases, you don't need a lib at all, you can just use the inline-def trick#2019-12-1315:15val_waeselynckhttps://clojurians.slack.com/archives/C06MAR553/p1576237425427800?thread_ts=1575899422.378000&cid=C06MAR553
That's far from the truth though, with dirac and all#2019-12-1315:32Filipe SilvaI meant the "Debugging" section though#2019-12-1315:33Filipe Silvadirac is listed in "ClojureScript Development" it seems#2019-12-0914:35yogthosClojure/north call for papers is open 🎉 https://www.papercall.io/clojure-north-2020#2019-12-0917:30chrisnNew release of libpython-clj (1.20)!
Thanks to help by jjtolton, joinr, and gilch and a few others we have two large new pieces that move us measurably closer to having a great Python development/production environment in Clojure.
The changelog has the details but we now support require-python that works just like require. It does an initialize call if one isn't done already, loads the module into a namespace, and then does the 'require' of that namespace into your current one. It supports 'reload' for when you are developing a new python module to make it smoother to develop new functionality in Python.
We also support creating python classes in clojure. So you can create a new python class purely in clojure that will call into your clojure functions including the 'self' argument. This allows us to interact with toolkits that require extension-by-derivation and is also just kind of fun to use.
It's up on Clojars now, Enjoy!!
<https://github.com/cnuernber/libpython-clj/blob/master/CHANGELOG.md>#2019-12-0920:52dotemacsState of JavaScript survey is out
(For the past 3 years, ClojureScript users who answered the survey made up 1% of the respondents. Maybe this year we can top that hint, hint 😉)
https://survey.stateofjs.com/#2019-12-1010:44victorbHello folks! Not sure if this is OK here as I see mostly open source project, but thought I'd give it a go.
Basically, for the last 6 months we've been working on a platform called Bravo that turns designs into native iOS and Android apps without coding anything.
Now, the frontend is entirely made in ClojureScript by one person, and ClojureScript was a pleasure to use. Looking forward to sharing lessons and experience around it in the future, once the launch-crazyness has calmed down.
If you want to check it out, the project landing page is <https://bravostudio.app> and the web app itself can be found at <https://projects.bravostudio.app>#2019-12-1015:04Luke Schubertjust as an fyi something bugged on chrome for me and that background box was covering up things as you scrolled#2019-12-1015:05victorbThanks a lot for the report! Could you possibly send a screenshot? Not entirely sure what would be happening#2019-12-1015:06Luke SchubertI attached a screenshot, is it not showing up in the message?#2019-12-1015:06victorbsorry, was collapsed by default, I can see it now. Thanks!#2019-12-1015:06Luke Schubertnot a problem#2019-12-1020:18bozhidarThe “State of CIDER 2019” survey results are out https://metaredux.com/posts/2019/12/10/state-of-cider-2019-results.html#2019-12-1102:05paluan batistahttps://blog.ambrosebs.com/2016/08/07/automatic-annotations.html#2019-12-1107:33vlaaad#cljfx css 1.1.0 released, adding support for Java 8, thus making all cljfx libs Java 8-compatible. https://github.com/cljfx/css
Go wild with desktop apps in Clojure!#2019-12-1109:00CameronOh, I didn't know you were the one who did cljfx.
I absolutely love it, when I first was messing with seesaw, seesaw was not the sort of thing I wanted (although that's not a dig on seesaw) ; I wanted something exactly like this, something declarative, where you're dealing with and manipulating raw data that acts as an interface for your eventual living breathing GUI, and will eventually of course be interpreted, in this case rendered.#2019-12-1110:00vlaaadThanks!#2019-12-1113:01tony.kayI just released Fulcro 3.0.13 and Fulcro Websockets 3.0.5. These are bugfix releases that solve some issues that popped up in the 3.x versions with transaction processing of graph merges.
https://github.com/fulcrologic/fulcro#2019-12-1115:01bozhidarThe State of CIDER survey results are out https://metaredux.com/posts/2019/12/10/state-of-cider-2019-results.html#2019-12-1210:55jerger_at_ddaWe initial-released https://github.com/DomainDrivenArchitecture/dda-k8s-crate for provisioning of Single-Node K8s Instances. We use this setup to deploy cheap & low traffic applications in a K8s way. Feedback & Stars are welcome :-)#2019-12-1217:56carocadparcera has now reached v0.10.0 . Special thanks to @dominicm for so much feedback of Clojure syntax used on the wild which I didnt initially consider.
https://github.com/carocad/parcera#2019-12-1221:48chrisnlibpython-clj has a new release 1.23.
• Conda support. We should now work automatically if you have activated your conda environment. Conda is IMO the best (read: works with binary dependencies in the best way) package manager for Python.
• Python objects now implement hashCode and .equals and use python semantics for these.
• Bugfixes around passing infinite sequences to python. Python generators make lazy sequences in clojure and clojure sequences are python iterables and work correctly with itertools.
https://github.com/cnuernber/libpython-clj#2019-12-1222:20didibusJust watched your talk about it. I really think this is an awesome project. Being able to use Python libraries as if they were Clojures, that's awesome#2019-12-1222:20didibusIts almost like having a ClojurePython dialect 😝#2019-12-1222:39chrisnThanks! We really are moving fast that direction. Things are quite a bit further along that pathway now that we have require-python and conda support.#2019-12-1320:31souenzzoDreaming about language-interop, clojure could allow extensiosn in the ns-loading process
(ns
(:extensions [libpython-clj.python/ns-init])
(:python-modules ["numpy" :as np])
(:require [,,,]))
#2019-12-1322:49chrisn@U2J4FRT2T - Please join us at https://clojurians.zulipchat.com/#narrow/stream/215609-libpython-clj-dev - that is a good idea.
Actually, along those lines we would also like to extend compliment so that people using compliment-based intellisense systems (emacs company-mode and vim) would get intellisense for python objects.#2019-12-1322:48oliyMartian, the HTTP abstraction library, 0.1.11
This release adds support for:
- Free form objects (additionalProperties) #70 (thanks @omartell)
- Recursive schemas #71
- re-frame on-success and on-failure handlers can be vectors, allowing closing over of local bindings #67
https://github.com/oliyh/martian#2019-12-1400:18tony.kayFulcro 3.0.15 is on Clojars. There were additional subtle issues in the graph merge logic that should now be fixed.#2019-12-1421:29borkdudeClj-kondo v2019.12.14 ✨
Unresolved namespace linter and 13 other enhancements/fixes!
This might be the last release for 2019. Thanks for using it, the great feedback and contributions.
Happy linting!
https://github.com/borkdude/clj-kondo/releases/tag/v2019.12.14
Follow up in #clj-kondo#2019-12-1423:22uochanDad ver 0.1.2 is out!
Tiny feature additions and some bugfixes are contained.
Small configuration management tool for Clojure
https://github.com/liquidz/dad#2019-12-1613:59miroHi guys! Just tried to summarize some of my thoughts on clustering and Kubernetes in my latest blog post: https://www.titanoboa.io/cluster.html
Though it relates to clojure only remotely, still I talk there about how titanoboa's stateless cluster works so it still might be of interest. Feedback welcome!#2019-12-1614:07dominicmThis is really interesting, I liked the history.#2019-12-1614:20vemvSounds promising :)
OTOH isn't Embedded Clustering sort of an oxymoron?
It seems to me that you can't do distributed programming (i.e. a HA setup) an a self-contained manner.#2019-12-1614:31miro@U45T93RA6 yeah you are right, I mean by it basically "clustering capabilities embedded in the application" - as opposed to using an external clustering framework... I used "embedded" just to reference embedded http servers.#2019-12-1614:49dominicmThe link to hacker news is broken.#2019-12-1615:40miro@U09LZR36F thanks will fix it#2019-12-2010:42jeroenvandijkIt seems to me that you can't do distributed programming (i.e. a HA setup) an a self-contained manner.
`
@U45T93RA6 why not? What if you were to abstract the http layer?#2019-12-2010:46vemvHA is about e.g. restoring machines if they go down.
Generally this implies a supervisor, or "master" thing (like a load balancer); a given server instance cannot manage the case where that instance itself goes down#2019-12-2010:51jeroenvandijkah I agree that it will not be more than a simulation, but it could be a very good one? Good enough to not have to think about it (too much)? I'm assuming here you can rely on a stable context (e.g. AWS ELB's and autoscaling for instance)#2019-12-2010:51jeroenvandijkOr am I talking about something else now?#2019-12-2011:31dominicmSomething we don't have in our software, that we expect of software in front of us, is stability.#2019-12-2011:31dominicmWe expect our programs to fail.#2019-12-2011:35jeroenvandijkWhat if you could simulate that like the chaos monkey, but than embedded. I agree stability cannot be expected, I do think you can make particular choices to have very stable software#2019-12-2012:44dominicmSure. My point was thinking about downtime and reaction latency.#2019-12-1616:17Daniel SlutskyLudovic Courtès of the GuixHpc
project kindly agreed to talk about Guix-Jupyter reproducible notebooks in an online meeting with the Clojure community.
Please mark your preferred times:
https://twitter.com/scicloj/status/1206503012304347137#2019-12-1617:03blueberryNew release 0.5.0 sheepysheepysheepysheepysheepy
https://aiprobook.com/numerical-linear-algebra-for-programmers?release=0.5.0&src=cslack#2019-12-1622:46athomasoriginalJust published a companion Youtube channel to Between Two Parens and started it off with a beginner series for how I setup Atom for Clojure development
https://www.youtube.com/playlist?list=PLaGDS2KB3-AqeOryQptgApJ6M7mfoFXIp#2019-12-1709:43jaihindhreddyCan't see any videos.#2019-12-1715:47athomasoriginalhmmm…that’s odd. What do you see? Maybe it’s just the link I provided :thinking_face:#2019-12-1811:29jaihindhreddyCan see now.#2019-12-1915:31sogaiuthe multiple short videos format is appreciated :thumbsup:
particularly liked the spelling out of why certain things were being demonstrated.
also, the references to some other resources (e.g. one of ericnormand's pages), but also that not everything at a certain page was necessary (e.g. skipping lein install).#2019-12-1918:12sogaiualso, in the 3rd video (the chlorine one), it's nice that you show how to get a socket repl via -J-D... -- i think i didn't hear any mention that there is something one can do to not have to enter this at the command line repeatedly (e.g. deps.edn and/or project.clj modification). may be that might get covered in another video? 🙂#2019-12-1918:43sogaiui noticed there didn't seem to be much coverage of keybindings (there was a bit in bringing up the command palette, true).
one of the things i found unfortunate about atom is the plethora of keybinding conflicts. i think this is worth knowing early and also some things one can do to cope.
also i think it's worth pointing out that it's not difficult to set up custom keybindings and that's likely something that will be a part of one's atom-using life.#2019-12-1920:49athomasoriginalhey @UG1C3AD5Z! Your comments are much appreciated 🙂
I am actually going to add a video for the key bindings because I agree that those require a little more to configure and I also think one on the short cuts for CLJis a wonderful idea. Thank you again for taking the time to let me know what worked and what I can do better!!
In the meantime, if you are looking for how I setup keybindings/my global clojure config take a look at these:
• clojure config https://github.com/tkjone/dotfiles/blob/master/.clojure/deps.edn
• chlorine hotkeys https://github.com/tkjone/dotfiles/blob/master/atom/keymap.cson#2019-12-1921:28sogaiugood to hear you have plans for a video with keybindings 🙂
i looked at you deps.edn file -- in my case, since i tend to switch among multiple projects, i have several aliases for socket repls (e.g. :sock, :sock2, :sock3). i'd like to only have one and get it to choose a random or unused port, but haven't worked on that yet.
as for hotkeys, i see you went for single letters -- possibly removing the initial C-; from the default suggestions on chlorine's page i guess (and some other changes it looks like). i have too much muscle memory for single letters already and think they are likely to conflict with other things too easily, so i have the non-vi defaults. whatever works well for each 🙂
fwiw, i use https://atom.io/packages/keymap-control to cope with diagnosing keybinding issues.
good luck with the next(?) video. may be there's some way to get some of the keys you type to show up on the screen. (i was curious as to exactly what you were typing when doing parinfer.)#2019-12-2112:59mauricio.szaboAlso, I would like to point that Chlorine supports shadow-cljs (and it will support figwheel too in the future), so if there are people interested in ClojureScript development they probably should go to shadow instead of Lumo#2019-12-2112:59mauricio.szabo(to be honest, Lumo support is only because it works without any modifications to the code 😄)#2019-12-1623:07LuAqua's release 0.2.1 sheepy
• offset value coming both in pixels and percent (0 to 1)
• jumpy and fast scrolling handling to avoid glitches and lag out of the box
https://github.com/luciodale/aqua#2019-12-1709:29pezThis looks super nice! I almost get the urge to add some scroll animations just because. 😃#2019-12-1709:59LuAhahah yeah right? 😄 thanks!#2019-12-1714:06Daniel SlutskyHere is the Guix-Jupyter meeting announcement:
https://twitter.com/scicloj/status/1206935971507380224#2019-12-1715:05sakalliThe registration for The International Clojure Data Science Meetup in Berlin on 27th of February, a few days before ClojureD, is now open. It is a meetup about improving the Clojure Data Science story. Clojure is a fantastic language for data, yet the data science ecosystem still needs some love. A bunch of us are busy with it. Join us if you have a dual crush on Clojure and data, or if you are just curious! Please register at https://ti.to/scicloj/international-clojure-data-science-meetup-in-berlin#2019-12-1915:45LuFork v1.0.0 out 🙂. Form lib for reagent and re-frame users 🍴
https://github.com/luciodale/fork#2019-12-2019:14Alex Miller (Clojure team)tools.deps.graph 0.2.24 is now available, adding the --size flag to include jar sizes (if desired) in your deps.edn dependency graphs. Enjoy!#2019-12-2019:14Alex Miller (Clojure team)If you have a deps.edn project and graphviz installed, you can probably try the new --size flag with:
clj -Sdeps '{:aliases {:g {:deps {org.clojure/tools.deps.graph {:mvn/version "0.2.24"}} :main-opts ["-m" "clojure.tools.deps.graph" "--size"]}}}' -A:g#2019-12-2021:03dominicmI don't suppose there's any indication of size in the size of nodes?#2019-12-2021:19Alex Miller (Clojure team)Not currently, some of that stuff is kind of finicky, but might try something like that#2019-12-2021:21dominicmYeah. Dot isn't great for that kind of layout.#2019-12-2020:54seancorfieldorg.clojure/java.data {:mvn/version "0.1.5"} https://github.com/clojure/java.data now supports constructor arguments via metadata and the ability to set properties on existing objects -- follow-up to #clojure or via DM#2019-12-2022:58uochanI just released dad a small configuration management tool ver 0.2.1!
https://github.com/liquidz/dad
Added REPL support and fixed some bugs.
Demo screencast is available here.
https://twitter.com/uochan/status/1208158269832695808#2019-12-2118:55sogaiui think it was a good idea to make the little video :thumbsup:
(i found the current description "configuration management tool" to be vague.)#2019-12-2208:54hindolWrote my very first library in Clojure. It is a JSON-RPC 2.0 client. You are welcome to try it out and report issues.
https://github.com/Hindol/json-rpc#2019-12-2300:28sparkofreasonhashtag is inspired by and derived from the very cool hashp project from @weavejester. Use for defining your own "debugger reader tags". Pre-alpha, feedback welcome and appreciated.
https://github.com/sparkofreason/hashtag#2019-12-2301:46Vincent CantinMy feedback: remove “sh**ty” from the description. It does not provide any information to the person reading it, and will be understood differently by persons of different culture and background.#2019-12-2302:08sparkofreasonDone.#2019-12-2303:05Vincent CantinI am developing a library which uses a lot of .cljc files, I want to give hashtag a try, but I would need it to work on both clj and cljs for that.#2019-12-2303:44Vincent CantinAnother feedback: I suggest to add the “issue” section in Github for your project.#2019-12-2315:16sparkofreasonhttps://github.com/sparkofreason/hashtag/issues/1#2019-12-2409:43borkdudeBabashka, a native Clojure scripting tool, v0.0.49 adds clojure.main/repl:
https://github.com/borkdude/babashka/releases/tag/v0.0.49. Follow up in #babashka.#2019-12-2411:42littleli🆒 Do you plan at some point to make also windows binaries like you do with clj-kondo?#2019-12-2411:51littleliOh, I see the issue. Interesting.#2019-12-2414:03blueberryNew release 0.14.0 - Santa's Edition sheepy
https://aiprobook.com/deep-learning-for-programmers?source=cslack&release=0.14.0#2019-12-2513:51borkdudePossibly the worst day to announce some thing, but from under the Christmas tree, I made this:
https://github.com/borkdude/deps.clj
Merry MXmas all!#2019-12-2516:44plexuskaocha-cljs 0.0-68 is out, which addresses a stability issue when testing against a browser environment. Kaocha-cljs provides cljs.test support to Kaocha, a functional and extensible test runner.#2019-12-2815:44mogenslundHi everyone
I am working on a rewrite of Liquid, Liquid 2.0, based on feedback from Liquid 1.0. Since it contains a lot of experiments and rewrites I have kept the code in its own temporary repository: https://github.com/mogenslund/liq2
It is still experimental, but stable enough to try. I have attempted to get it even closer to the vim experience. Feel free to give it a try (Windows users might run into problems, though).#2020-12-2901:19LuInst, a multi language cljs tool to parse instants into "Time Interval Ago" or "In Time Interval" i.e. "5 minutes ago" "in 2 minutes" https://github.com/luciodale/inst#2020-12-2914:10valtteriCool! For simple cases there are also some hidden gems in the Google Closure library https://google.github.io/closure-library/api/goog.date.relative.html
cljs.user> (require '[goog.date.relative :as gdate])
nil
cljs.user> (gdate/format (.parse js/Date "2019-12-29T14:06:41.079Z"))
"3 minutes ago"
#2020-12-2914:19LuThanks for pointing it out! 🙂#2020-12-3111:07metasoarousDoes it support the reverse mapping from friendly strings to times?#2020-12-3111:33LuNot currently, but hey! It’s a good idea 💡 will add this in the next hours :)#2020-12-3118:47LuI have been playing with it for a bit and although I implemented a safe way to go back to the Inst, it’s just an approximation of the original value (as the exact seconds are lost during the conversion to string when they go above the hour unit). For this reason, I don’t think it’s a useful feature to add, as the reverse algorithm produces an output that doesn’t exactly match with the initial Inst #2020-12-2916:38borkdudespartan.test: a spartan testing library compatible with babashka https://github.com/borkdude/spartan.test
tl;dr: testing for scripts written with babashka
can also be used with clojure itself, if needed#2020-12-3006:06JAtkinshttps://github.com/JJ-Atkinson/Draftable#2020-12-3006:08JAtkinsI'm starting to put some time into this. I would love ideas for the project! At the moment I don't think coding help would be useful, since everything is so unstable. Once I have a usable core I'll make a call for help. The readme explains why and what I want make this.#2020-12-3022:54borkdudeMade a thing to cut out the unused vars from a project:
https://github.com/borkdude/carve
Typical usage:
clj -A:carve --opts '{:paths ["src" "test"]}'
#2020-12-3100:25Alex Miller (Clojure team)I remember one day, many months ago, when you didn’t release something :)#2020-12-3102:03LuWas it a very sad day? 😄#2020-12-3109:34MattiasSo, intriguing but I have to ask - when does the need typically come up? (I’d imagine all sorts of IDEs, lingers and build pipelines would also catch stuff like this?). Thanks 😊#2020-12-3110:30borkdude@UCW3QKWKT I'm not using such an IDE myself, but having this as an IDE-independent tool gives more options and having options is nice#2020-12-3110:41MattiasMakes sense, thanks! It’s how I like it as well 😀#2020-12-3112:04borkdude@U064X3EF3 I'm pretty sure the last day of 2019 will be a new-release-free day 🙂#2020-12-3112:10genmeblogClojure2d 1.3.0-alpha2 - revised version, with big changes to clojure2d.color namespace.
https://clojure2d.github.io/clojure2d/#2020-12-3112:14genmeblogAlso new version of Fastmath is ready to be used 1.5.0-alpha4. What's new is fastmath.optimization namespace, Revised stats, vector operations, new interpolation functions added, signal (audio) processing. Enjoy. https://github.com/generateme/fastmath#2020-12-3115:41athomasoriginalMorning All! Just finished the last blog post of the year https://betweentwoparens.com/reagent-and-hiccup - As always, I welcome comments and any suggestions for improvements to make this as useful as possible. Have an amazing New Year’s Eve!#2020-12-3116:51henrik [tag children] is also valid hiccup.#2020-12-3117:16Jakub Holý (HolyJak)The first example, would it not be better if the two were same, ie not just h1 in one and div with a class=.. in the other?#2020-12-3118:03athomasoriginalGood points! Updated 🎉#2020-12-3118:08henrik“To be considered valid Reagent Hiccup, the vector you pass to Reagent needs to take one of the following three shapes”
Just remove “three”#2020-12-3120:07seancorfieldJust a gentle reminder: #announcements is for projects & libraries per the channel topic -- we have #news-and-articles for blog posts etc.#2020-01-0104:57seancorfieldWhile this might look like a blog post, it's actually a New Year's Eve round-up of the main Clojure projects I maintain and their updates since August: https://corfield.org/blog/2019/12/31/releases/ -- expectations, honeysql, core.cache, core.memoize, java.data, java.jdbc, clj-new, depstar, next.jdbc, dot-clojure -- consider this a six-month summary of their releases. Follow-ups to #expectations #honeysql #clojure #sql #tools-deps as appropriate, or via DM.#2020-01-0301:40practicalli-johnhttps://clojars.org/seancorfield/clj-new only shows clj-new 0.8.3 and 0.8.4 fails on the command line when tried just now. Is this just slowness for clojars to update?
0.8.3 seems to be working just fine though :)#2020-01-0302:21seancorfieldOops! I got distracted by work and forgot the most important step: deploy clj-new#2020-01-0302:22seancorfieldThanks for the heads up. 0.8.4 is on Clojars now.#2020-01-0319:59practicalli-johnSeems like that's the maintainers equivalent of forgetting the attachment on an email 🙂 Thanks Sean, great work.#2020-01-0705:57Jakub Holý (HolyJak)FYI, regarding Clj-new and --query it surprised it it isn't called --dry-run as is common but I guess there are good reasons...#2020-01-0706:15seancorfield@U0522TWDA Well, it doesn't dry run the actual dependency fetching, and it provides more information about the template substitutions and what file/folder names would be created, with namespaces etc. So I felt -? / --query was more appropriate.#2020-01-0706:16Jakub Holý (HolyJak)Thank you#2020-01-0706:17seancorfield(there's already a verbose option to display information about the dependency fetching -- at some point I may try to integrate a full "dry-run" approach)#2020-01-0110:27LuNew year new version V1.1.0 🎆
Now fork has a convenient handler to perform real time server side validation, before a form is submitted. Check it out in the README
https://github.com/luciodale/fork#2020-01-0218:12Alex Miller (Clojure team)I just created #clojure-survey as I'm starting to prep the State of Clojure 2020 survey. If you want to help me bike shed various answer sets, would be happy for feedback there. This is a lib-related announcement as I want to make sure I include the right set of options for a few questions. Please take all feedback on this to #clojure-survey#2020-01-0318:25rafdFor Clojurians in Toronto, we're starting a regular monthly Beginners Clojure Workshop. Bring your laptop and work on exercises with a few experienced Clojurians around. This month's workshop is on January 15 @ DevHub. RSVP on Meetup: https://www.meetup.com/Clojure-Toronto/events/267304205/#2020-01-0318:56seancorfieldThis belongs in #events -- not in the main #announcements channel.#2020-01-0400:25andy.fingerhutNot exactly a new thing, but the Clojure cheat sheet with tooltips containing summaries of content on http://ClojureDocs.org has been updated from summaries from 2014, to summaries from 2020! I was not aware of a data export of http://ClojureDocs.org content after 2014 until recently: https://jafingerhut.github.io#2020-01-0406:47nateHey everyone, our latest episode is a review on our favorite topics from 2019: https://clojuredesign.club/episode/062-2019-in-review/
It's a good overview of the topics that we've talked about, so it's a good place to start if you're curious about the podcast. Follow up in #clojuredesign-podcast clj 🎙️#2020-01-0411:00henrikThis should probably go in #news-and-articles rather than #announcements #2020-01-0413:03djanusI've written a word game in re-frame. Actually it's been around for a while, but I have now translated it to English. Code: https://github.com/nathell/wordchampions, play: http://danieljanus.pl/wladcyslow/, backstory: http://blog.danieljanus.pl/2020/01/03/word-champions/#2020-01-0413:04djanus(not sure if this belongs in this channel – please let me know if not)#2020-01-0413:35p-himikWhere do you get the words from? Just stumbled upon "tions" - that doesn't seem to be correct. Also "Perth" - are proper names supposed to be allowed?#2020-01-0413:37djanusThe wordlist is this one: https://github.com/first20hours/google-10000-english. It does contain proper names and "tions", not sure why#2020-01-0413:37p-himikJust found "MSGID". :D#2020-01-0413:40p-himik"tions" is probably there because of the line folding.#2020-01-0413:44p-himikJust as an idea - maybe it's worth it to check out other corpora, e.g. from https://www.corpusdata.org/. At least there they're divided by their origin so you might be able to find the most sensible set of words without too much trouble.#2020-01-0413:45p-himikIf you want to continue developing this game, here's another idea - add a difficulty level or a flag that allows a user to limit the words only to regular nouns.#2020-01-0413:45p-himikBut overall, a great word game, I love it. :)#2020-01-0414:12djanusThanks for the feedback! And yes, I'm definitely in for better wordlists 🙂#2020-01-0511:56Daniel SlutskyThis Thursday, Jan 9th 2020, 3-5pm UTC, we meet Ludovic Courtès, who will tell about Guix-Jupyter reproducible notebooks.
Registration: https://twitter.com/scicloj/status/1213789408983470080#2020-01-0520:44seancorfieldThis belongs in #events -- where you also posted it -- so I'm deleting it from #announcements#2020-01-0603:04wilkerlucioHello, I'm happy to announce a new support library for core.async, this library attacks the following problems:
1. use of promise-channels in general
2. core.async error propagation
3. JS promises integration with core.async
4. testing core.async user code with cljs.test
You can find the library at: https://github.com/wilkerlucio/wsscode-async
I open a clojureverse thread to discussions around it: https://clojureverse.org/t/clojurescript-core-async-and-promises-with-sanity/5326
I hope you enjoy, and happy new year!#2020-01-0611:57mikethompson> lein-git-inject
Leiningen middleware which computes the "version" at build-time - from the ambient git context (think tags).
Also allows this "computed version" to be automatically embedded in your ClojureScript application for use at runtime (think logging, display, etc)
https://github.com/day8/lein-git-inject#2020-01-0714:40victorbThis is great, been doing it "manually" by having a macro that loads the git repository on compile time. Great to have something reusable 🙂 Thanks!#2020-01-0714:42victorbI guess you've already seen https://github.com/clj-jgit/clj-jgit @U051MTYAB ? Saw that you're shelling out to git cli and doing bunch of matching, with clj-jgit it would be a bit simpler#2020-01-0618:42Bryan DuxburyWe just released a library that extends Nippy serialization to Clojure fns: https://tech.redplanetlabs.com/2020/01/06/serializing-and-deserializing-clojure-fns-with-nippy/#2020-01-0618:45vemvInteresting one! I gave it a quick read.
Note the existing channel desc:
> Avoid cross posting in #news-and-articles#2020-01-0618:45Bryan Duxburywhoops my bad... first time announcer#2020-01-0618:48vemvas of lately we're trying to tighten the focus of the channel, unless something is an announcement of practically global interest.
For setting good example you might want to delete the #announcements version and leave the other as-is. Thanks!#2020-01-0618:48Bryan Duxburyi just did the opposite. keep that in mind for the next time around#2020-01-0618:49vemvFair enough. Desc wasn't exactly clear tbh#2020-01-0619:22seancorfield@U45T93RA6 Since this is a library announcement, I think it's fine here (I'm one of the Admins here @UM8DMC9FT)#2020-01-0619:22Bryan Duxburycool, appreciate the guidance. hopefully not the last package i get to announce.#2020-01-0619:24vemvWhoops. This was posted to #news-and-articles first so I was biased to read it mostly as an article#2020-01-0619:25seancorfieldAgreed that it shouldn't have been cross-posted there too. Remember that we're trying to maintain a "light touch" here rather than trying to become the "Channel Police" 🙂#2020-01-0619:49greglookhttps://github.com/greglook/cljstyle 0.10.1 is available now for all your code-formatting needs! cljstyle is a binary tool for checking and fixing formatting errors in your Clojure code. This minor version includes a new pipe command for easy editor integration.#2020-01-0622:51mauricio.szaboJust published a new version of the Socket REPL package for Atom Chlorine - version 0.3.9.
On this version, support for Clojerl REPLs, and a simple fix on Autocomplete for "earmuffs" vars 🙂. Discussions on #chlorine channel#2020-01-0715:59Alex Miller (Clojure team)Hello everyone! It's time for the annual State of Clojure survey for anyone using Clojure, ClojureScript, ClojureCLR! https://www.surveymonkey.com/r/clojure2020 - takes <10 min and is a huge source of useful info to the community. All results are released after the survey is complete.#2020-01-0715:59Alex Miller (Clojure team)If you have feedback or questions, you can take it to #clojure-survey#2020-01-0718:37chrisnRelease 1.30 of libpython-clj is out. We have:
* Support for python classes in require-python. They can be required like modules although you have to understand that in that case you are essentially calling the class methods explicitly (meaning overridden methods don't work). This is what you would expect in Python also.
* Deeper integration of numpy into the datatype math system meaning you can have a numpy object and type (+ numpy-ary 5) and get back a new numpy array. This uses the numpy functions under the cover.
* A demonstration of a cutting edge facial rec engine (https://github.com/cnuernber/facial-rec) that uses docker, conda, python, and clojure all playing in the same box.
* Lots of bugfixes.
https://github.com/cnuernber/libpython-clj#2020-01-0718:41eggsyntaxmetasoarous [1:40 PM]:
@UDRJMEFSN Awesome! Nice work!
(copied from main channel)#2020-01-0805:32wilkerlucioHello everybody, just release a new library called edn-json (https://github.com/wilkerlucio/edn-json).
This library provides a way to encode EDN data to JSON, similar to clj->js, but does it in a way that allows restauration of the EDN types on the conversion back (keywords, symbols, uuids, etc...). The intended application is to be able to store data from EDN in JSON document stores (like MongoDB, IndexedDB...) in a way that keeps them efficient (leveraging the structure) while enable the data to be converted back to it's original form. More details on the README.#2020-01-0814:46mafcocincoIs this similar to transit?#2020-01-0815:07isakFor transit, they specifically caution against storing the results, while this one encourages it @U6SN41SJC#2020-01-0815:08mafcocincoAh, makes sense. So they are complimentary? Or would you say edn-json is a super set of the functionality that transit provides?#2020-01-0815:12isakYea, complementary, I think. It sounds like it would still make sense to use transit for transport, and this for anything durable (or if you need other JS-like tools to be able to interact with it easily)#2020-01-0815:45shaun-mahoodI believe that transit no longer discourages you from using it to store results - they updated the readme after having no breaking changes for a few years.#2020-01-0816:06isakAh you're right: https://github.com/cognitect/transit-js/commit/f49c7bae88bfbb4b0c36966d8a987341e44a3359#2020-01-0816:44favilaI think the distinction is, transit uses json as a storage/transmission medium, but edn-json actually translates to json#2020-01-0816:45favilathe json transit produces is good for ensuring faithful round-trips in and out of edn types, but it’s not good for consuming as json#2020-01-0816:45favilaedn-json gives up some round-tripability to get something that a native json environment could consume comfortably#2020-01-0920:50fmjreyhttps://github.com/wilkerlucio/edn-json/pull/1#2020-01-0921:48pithylessFYI - a typo in the README:
(= (edn->json #uuid "") "__edn-value|#uuid foo/symb")
#2020-01-1012:53wilkerluciothanks, fixed#2020-01-0816:24petr.mensikHello guys, I just released a new library for working with Microsoft Exchange. It's built on top of ews-java-api so it simplifies communication with Exchange a lot. Any suggestions or PRs are very welcomed 🙂
https://github.com/pmensik/exchange-api#2020-01-0816:43eval2020New release for deps-try - Quickly try out dependencies on rebel-readline.
https://gitlab.com/eval/deps-try/tree/master#deps-try
Updates:
- rebel-readline now pprints return values (thanks to @dominicm)
- invoke without dep
Get Started
$ clojure -A:try clj-time
...
user=> (require '[clj-time.core :as t])
user=> (t/now)
;; add additional dependencies
user=> :repl/try tick
#2020-01-0816:48p-himikHow is deps-try better than using -Sdeps? It's a bit less verbose (assuming deps-try is added in the user's clj config), but is there something I'm missing?#2020-01-0817:47eval2020It's indeed similar to (but way easier than) clojure -A:rebel -Sdeps '{:deps {foo {:mvn/version "RELEASE"} some-other {:mvn/version "RELEASE"}}}'.
Additionally deps-try allows to add dependencies once the repl is running via :repl/try other-dep.#2020-01-0817:57p-himikAh, I can see that you use clojure.tools.deps.alpha.repl/add-lib - that's what I do myself. :) Nice!#2020-01-0907:10danielcompton💸 Clojurists Together is going to be funding four project $9,000 each over 3 months. 💸 See what kinds of projects our members want us to fund at https://www.clojuriststogether.org/news/q1-2020-survey-results/, and apply by January 15th at https://www.clojuriststogether.org/open-source/#2020-01-0913:42borkdudespartan.spec: an implementation of clojure.spec.alpha that can be interpreted by and used with babashka:
https://github.com/borkdude/spartan.spec#2020-01-0916:52Filipe SilvaHeya, just wanted to let you know that datafire is now available as 0.1.1 at https://github.com/filipesilva/datafire.
It lets you persist Datascript databases in Firebase's Firestore. Supports offline usage and multi-user synchronization. You can use Firestore Security Rules to limit access.
If you're persisting Datascript and this fits your usecase let me know, and also let me know if you've been looking for something like this but with more features. Very interested in how this setup can be pushed further.#2020-01-0917:31metasoarousNice work! On startup does this have to transact in all the available data, or does it use from-datoms?#2020-01-0917:33Filipe Silvait replays all previous transactions in order#2020-01-0917:33Filipe Silvaso it keeps history#2020-01-0917:34metasoarousOK; That could get expensive as number of transactions build up. It's much more efficient if you can rehydrate from a collection of datoms. That may be challenging with firebase as a backend, but maybe there's a way to do it?#2020-01-0917:34Filipe SilvaI haven't thought very hard about it, but maybe#2020-01-0917:35Filipe Silvathat version mainly supports transaction level granularity#2020-01-0917:35Filipe Silvameaning it persists opaque transactions#2020-01-0917:35Filipe SilvaI was thinking of supporting datom granularity, thus persisting datoms (opaque or not)#2020-01-0917:35metasoarousYeah, semantically that is nice (storing transactions). Clear conceptual model.#2020-01-0917:36Filipe Silvabut ran into a roadblock where firestore is actually really slow when offline is on and loads of small docs hit it#2020-01-0917:36Filipe Silvagoing to datom granularity might also enable views and entity based security rules#2020-01-0917:38Filipe Silvabut I wanted to understand usecases better before trying to figure out the firestore slowness#2020-01-0917:38Filipe SilvaI hadn't considered conn-from-datoms very much before you asked though#2020-01-0917:39Filipe Silvabut if there's datoms available, and there's a mapping from the firebase ordering to the local ordering, I think it would help#2020-01-0917:40Filipe Silvathe mapping will always be necessary because only the server has the real order, and it's actually very hard to just get a monotonically increasing number on firestore#2020-01-0917:41Filipe Silvaso the server uses nanosecond precision timestamps... which unfortunately lose precision when coming over#2020-01-0917:42Filipe Silvathe offline model also doesn't cater very well to a transaction based CAS number either, so it's for the best#2020-01-1716:55Ian Fernandez@U6FH8QZPD#2020-01-0916:59Alex Miller (Clojure team)Have you completed the State of Clojure 2020 Survey yet? If not, take 8 minutes and complete it here: https://www.surveymonkey.com/r/clojure2020 - thanks!#2020-01-0917:03Alex Miller (Clojure team)If you've already taken it, can you post it in your local Clojure meetup or company slack room? That would really help to spread the word.#2020-01-0917:13danielneal🎉 I’m happy to announce a new major version of Compound https://github.com/riverford/compound
Compound is a library to help maintain indexed data in reagent/re-frame apps. It works with maps to make debugging and inspection easy.
The new version (compound2) is not backward compatible, but improves on the original in a number of ways - it’s faster, has a simpler api, and is less impactful on your bundle size. Hope you find it useful!#2020-01-1014:42rgm@U051H1KL1 I've opened a PR to add it to clojure-toolbox ... if you can think of a better category than "Databases", please lmk.#2020-01-1014:43rgmAlso, might be worth adding some github topic tags so it shows up in https://github.com/topics/re-frame#2020-01-1014:44rgm(https://github.com/weavejester/clojure-toolbox.com/pull/336 for the toolbox PR)#2020-01-1015:01danielneal@U08BW7V1V ah thanks for that 🙂 good idea with the topic tags, I didn’t even know they were a thing#2020-01-1007:12mike_ananevHi there! I created project template for clj-new, based on Badigeon. It can compile java sources, make uberjar, (optionally omit sources), create standalone bundle (JDK9+ required).
Thanks to Sean Corfield and Ewen Grosjean (EwenG).
https://github.com/mikeananev/sapp#2020-01-1010:39borkdudeWhat is a standalone bundle vs an uberjar?#2020-01-1011:33mike_ananevuberjar needs JDK, standalone is really standalone: just unzip and run#2020-01-1011:34borkdudeso the standalone bundles a JDK inside?#2020-01-1016:06mike_ananevyes#2020-01-1010:15borkdudeClj-kondo January-February (or however long the history goes) release thread. Follow up in #clj-kondo#2020-01-1010:15borkdudehttps://github.com/borkdude/clj-kondo/releases/tag/v2020.01.10#2020-01-1322:10borkdudeSmall "critical" update with regards to with-redefs: https://github.com/borkdude/clj-kondo/releases/tag/v2020.01.13#2020-01-1011:13carocadParcera v0.10.2 released with some edge case fixes. Thanks again to @dominicm for the valuable feedback
https://github.com/carocad/parcera#2020-01-1011:14dominicmI will give this another run on my home directory corpus :)#2020-01-1017:02dominicmNo failures!!! party-corgi#2020-01-1017:07slipset#clj-commons has taken over maintenance of pomegranate (https://github.com/clj-commons/pomegranate), the sane clojure interface to Aether/Maven Resolver. Version 1.1.1 is now released to Clojars https://clojars.org/clj-commons/pomegranate#2020-01-1018:16rickmoynihanjust looked to see what’s changed and it looks like the changelog might want updating#2020-01-1018:40Alex Miller (Clojure team)core.async 0.7.559 is now available#2020-01-1018:40Alex Miller (Clojure team)A new release of core.async is now available, which includes a number of long-pending bug fixes.
• ASYNC-198 (CLJ) Fix exception rewriting in go can replace return value (thanks Kevin Downey!)
• ASYNC-220 (CLJ) Fix exception in go finally swallows exception of outer try (thanks Kevin Downey!)
• ASYNC-229 (CLJ) Fix go finally block executed twice (thanks Kevin Downey!)
• ASYNC-212 (CLJ) Fix go fails to compile expressions with literal nil as let value (thanks Nicola Mometto!)
• ASYNC-145 (CLJ, CLJS) Fix mix throws error when many channels added (thanks Angus Fletcher!)
• ASYNC-170 (CLJ) Fix binding in go block throws assertion error (thanks Kevin Downey!)
• ASYNC-127 (CLJ, CLJS) Fix mult to work as doc'ed with all taps accepting before next (thanks Leon Grapenthin!)
• ASYNC-210 (CLJ) Fix puts allowed when buffer still full from expanding transducer (thanks Brian Rubinton!)
#2020-01-1415:00Rachel Westmacottand: https://clojure.atlassian.net/browse/ASYNC-178#2020-01-1020:24Alex Miller (Clojure team)Got a bad case of the Friday afternoons? Surely you have 8 minutes to take the State of Clojure 2020 survey! https://surveymonkey.com/r/clojure2020#2020-01-1020:33Alex Miller (Clojure team)not sure those are widespread enough yet to warrant a question, but happy to put in the file for next year. btw, head to #clojure-survey for discussion#2020-01-1020:43borkdudeor maybe a question about GraalVM 🙂#2020-01-1021:14Alex Miller (Clojure team)There are several questions that include Graal#2020-01-1103:05Vincent CantinI wished there was a radio box to tick “Do you work in JS and are dying to change your job to a Clojure one?”#2020-01-1122:31CandidJoker v0.14.1 has been released: https://github.com/candid82/joker/releases/tag/v0.14.1#2020-01-1213:29wilkerlucio[com.wsscode/pathom "2.2.29"] is out! a few fixed bugs:
- `pc/reader2` will return `::p/not-found` instead of an error when dependency links are missing
- `::p/env` is automatically removed from mutations that return it and have no query
Check the full changelog at: https://github.com/wilkerlucio/pathom/blob/master/CHANGELOG.md
Thanks!#2020-01-1220:02borkdudeBabashka, a native Clojure scripting tool, Jan-Feb thread (or however long the history will be). Follow up in #babashka#2020-01-1220:03borkdudev0.0.62: add-classpath and more!
https://github.com/borkdude/babashka/releases/tag/v0.0.62#2020-01-1609:54borkdudev0.0.63: https://github.com/borkdude/babashka/releases/tag/v0.0.63
Windows build and performance improvements.#2020-01-1710:04borkdudeThanks to the help from @unlog1c's clj-async-profiler, hot loops with babashka are now 8x faster:
https://github.com/borkdude/babashka/releases/tag/v0.0.64#2020-01-2010:20borkdudehttps://github.com/borkdude/babashka/releases/tag/v0.0.66#2020-01-1315:54rutledgepaulvCut the first release of https://github.com/vodori/schema-conformer over the weekend. It’s a library that contains a more sophisticated general-purpose “matcher” for working with prismatic schemas. Useful when you want to coerce json data into richer edn data (strings->keywords, vectors->sets, iso-strings->datetime objects, etc).#2020-01-1317:21ikitommi👍 there is a list of 3rd party schema-libs in the schema repo, please PR that in do people will find this.#2020-01-1322:34rutledgepaulvWill do, thanks#2020-01-1316:41nathanmarzWe've open-sourced proxy-plus, a library providing a replacement for Clojure's "proxy" that's 10x faster and more usable https://github.com/redplanetlabs/proxy-plus#2020-01-1317:00dominicmWhat's the trade off? Or is it all better and could be put into core?#2020-01-1317:21nathanmarzThere's no trade off, it's just better.#2020-01-1317:37gklijsWell, it has a dependency on https://asm.ow2.io/ but since the impressive list of uses that should not be an issue. Maybee there are other pieces of clojure where asm could speed things up?#2020-01-1317:39gklijsAny reason version 4.2 is used and not a more recent version?#2020-01-1317:46nathanmarzNo reason, we just haven't updated the version we use internally in a long time.#2020-01-1317:52dharriganThat's a very old version of asm- I mean 6 years ago.#2020-01-1503:21didibusCouldn't it use the included ASM with Clojure and lose the dependency?#2020-01-1503:21didibushttps://github.com/clojure/clojure/tree/master/src/jvm/clojure/asm#2020-01-1319:08Alex Miller (Clojure team)Haven't filled out the State of Clojure 2020 Survey yet? Now's a good time: https://surveymonkey.com/r/clojure2020#2020-01-1319:28tony.kayI just released Fulcro 3.1.4 and Fulcro Inspect 2.2.1 Electron.
This new version of inspect allows you to select the port on which the tool listens, and properly manages multiple client inspect sessions at once (i.e. two React native apps and multiple web apps can all be inspected at the same time).
The new binaries of the electron app are here: https://github.com/fulcrologic/fulcro-inspect/releases/tag/2.2.1
You must use Fulcro 3.1.4 and above with this version.#2020-01-1507:56csmI know this isn’t clojure, but I’ve been working on a JavaScript Datomic client, and have at least some of the basics working against peer-server and cloud. It’s now at the state where I think it’s okay to point it out publicly: https://github.com/csm/datomic-client-js#2020-01-1509:03steveb8nthis is great. I’ve got js lambdas calling datomic lambdas (eventually http direct) to work around the fact that there’s no js client. love your work#2020-01-1517:06Adam HelinsKafka.clj, a fairly clean and fairly well-documented client library for Kafka, is now considered battle tested with version 1.3.1. Enjoy ! https://github.com/dvlopt/kafka.clj#2020-01-1517:11gklijsNice, also support for steams and the admin client.#2020-01-1517:12Adam HelinsIndeed, as well as creating mock apps so you don't have to actually run Kafka for testing or fiddling at the repl :)#2020-01-1608:17danierouxI have been enjoying kafka.clj, thank you#2020-01-1523:10miroHello Everyone! A New release (0.8.3) of titanoboa is now available.
https://github.com/mikub/titanoboa#2020-01-1615:20Alex Miller (Clojure team)Every year we do a State of Clojure survey and the 2020 one is open now, would be great if you have a few minutes to fill it out
https://surveymonkey.com/r/clojure2020#2020-01-1703:29Alex Miller (Clojure team)tools.deps.alpha 0.8.264 and clj 1.10.1.496 are now available.#2020-01-1703:29Alex Miller (Clojure team)The main change in this is that support for s3 maven repos has been completely replaced and is now using a new impl of the Maven resolver transporter API based on the cognitect aws-api. The old version used the transporter-wagon adapter, the unmaintained spring s3 wagon, and the AWS Java SDK. Those deps have been happily dropped on the floor, and all other deps were bumped as well. Support for some newer AWS credential sources may be better, particularly when running on AWS. Also, you can explicitly set the s3 bucket region in your deps.edn like {:mvn/repos {"my-bucket-repo" {:url ""}}} - this is a feature of this transporter, not a general AWS thing.#2020-01-1719:30niwinzHmm, After update im getting a strange exception
Downloading: com/cognitect/transit-clj/0.8.319/transit-clj-0.8.319.pom from
Error building classpath. org.apache.maven.repository.internal.DefaultModelResolver.<init>(org.eclipse.aether.RepositorySystemSession, org.eclipse.aether.RequestTrace, java.lang.String, org.eclipse.aether.impl.ArtifactResolver, org.eclipse.aether.impl.VersionRangeResolver, org.eclipse.aether.impl.RemoteRepositoryManager, java.util.List)
java.lang.NoSuchMethodException: org.apache.maven.repository.internal.DefaultModelResolver.<init>(org.eclipse.aether.RepositorySystemSession, org.eclipse.aether.RequestTrace, java.lang.String, org.eclipse.aether.impl.ArtifactResolver, org.eclipse.aether.impl.VersionRangeResolver, org.eclipse.aether.impl.RemoteRepositoryManager, java.util.List)
at java.base/java.lang.Class.getConstructor0(Class.java:3349)
at java.base/java.lang.Class.getConstructor(Class.java:2151)
at clojure.tools.deps.alpha.extensions.pom$model_resolver.invokeStatic(pom.clj:49)
[...]#2020-01-1719:30Alex Miller (Clojure team)What are your full deps? And do they include pomegranate?#2020-01-1719:31niwinzhttps://github.com/uxbox/uxbox/blob/docker/arm64-adaptation/backend/deps.edn#2020-01-1719:31niwinzhmm not explicitly#2020-01-1719:31niwinzwith 1.10.1.492 works ok...#2020-01-1719:34niwinzit fails always after com/cognitect/transit-clj/0.8.319/transit-clj-0.8.319.pom i dont know if is something relevant#2020-01-1719:35Alex Miller (Clojure team)Happy to help diagnose but you’re going to have to give me more context to repro#2020-01-1719:38niwinzat this momment i don't have more context, maybe tomorrow i try to investigate more. If i found something "relevant" i ping you#2020-01-1719:38niwinzthanks#2020-01-1719:42niwinzok is something related to :local/root#2020-01-1719:43niwinzi commented that dependencies and the -Stree is now can resolve all deps..#2020-01-1719:47niwinzthe simplest reproducible case is (deps.edn):
{:deps {somepackage {:local/root "path/to/package"
:deps/manifest :pom}}}#2020-01-1719:52Alex Miller (Clojure team)thx, repro'ed. I'll take a look#2020-01-1719:52Alex Miller (Clojure team)must be some drift in the pom model reading code across lib versions#2020-01-1721:27Alex Miller (Clojure team)fixed, but might be a couple days before I can release on brew (they gets antsy if you release too frequently)#2020-01-1721:28Alex Miller (Clojure team)should downgrade for the moment to 492#2020-01-1800:37niwinzthanks! no problem i stay with 492 for the moment#2020-01-2021:27Alex Miller (Clojure team)new release 1.10.1.502 is now available and fixes this issue#2020-01-1814:05vemv👋
Did you know that Github offers a variety of RSS feeds (commits, releases), and that relatedly, Slack offers a RSS subscription bot?
In face of that I created https://github.com/nedap/lein-subscribable-urls which helps you creating a large feed out of your dependency chain.
The result is similar to #announcements but maybe a bit more diverse (not every clj author hangs out in Clojurians), and selective.
Hope some will give it good use!#2020-01-1817:20lispycloudsReleased 0.4.0 of https://github.com/lispyclouds/clj-docker-client : An idiomatic, data-driven, REPL friendly Clojure Docker client. This is a full rewrite of the lib and is completely data driven and takes all its inspiration from Cognitect's aws-api client. Powered by Docker's REST API, this supports ALL of docker and is very REPL friendly too! Head over to #docker for further discussions 😄#2020-01-2009:03SwazmHi! I need a little help 😁 Could you please tell me what cloud platform are you using? if you are using one.#2020-01-2009:07p-himikAWS and Heroku. How does it help you?#2020-01-2009:13SwazmThank you, we are doing a research on the most used cloud platforms#2020-01-2009:14pezThis is the wrong channel to post questions. It is for announcements. The posts here are syndicated and reposted here and there on the internets.#2020-01-2009:15Swazmow ok sorry#2020-01-2009:18pezI'm not sure which channel would be the right one,.. But #off-topic actually has more subscribers, and if you give the question some context, you'll probably be able to get help with the research.#2020-01-2009:27SwazmThank you very much @U0ETXRFEW 😁 i will try there#2020-01-2022:27mauricio.szaboHi! Just published a new version of the Socket REPL package for Atom, Chlorine - https://atom.io/packages/chlorine
Version 0.4.0 adds support for "goto var definition" for most REPLs (before, it only supported Clojure. Now, it supports ClojureScript (with Shadow-CLJS), ClojureCLR, Clojerl, Babashka and Joker! Discussions on #chlorine channel 🙂#2020-01-2112:05carocadparcera v0.11.0 is now available with Clojurescript support 🚀
https://github.com/carocad/parcera#2020-01-2112:35niwinznice, i just looking for something like this#2020-01-2117:43hindolWhat are some use cases for this library?#2020-01-2118:13carocad@UJRDALZA5 whenever you want to analyze clojure code without worrying about it being executed on your system (see security risks of read-string)#2020-01-2118:47niwinzmy use case is a script that collects translation messages on clojurescript code. i have previously used the reader but it need too many hacks because it evaluates some code... with that library i can just parse the files without evaluating it#2020-01-2118:48niwinz@U0LJU20SJ i found that only top level forms have metadata, it is posible to have metadata on "all" expressions? I need line number of expersions...#2020-01-2118:53carocad@U06B73YQJ not sure what you mean. Can you give me an example ?#2020-01-2119:09niwinzright now, if i execute (meta (second (parcera.core/ast somedata))) , it will return something like {:start {:row 272, :column 0}...} but if i do the same over an expression a little deeper, it always returns nil so I deduce that only top level forms has metadata...#2020-01-2119:11niwinzfor my use case i need that metadata on all possible forms, because im parsing cljs files and looking for (tr "some.translation.string") ... and it would be awesome have a line number of that form#2020-01-2119:13niwinzExample:
"(form)=>" (:list (:symbol "tr") (:whitespace " ") (:string "\"ds.color-lightbox.title\"") (:whitespace " "))
"(meta)=>" nil
"(form)=>" (:list (:symbol "tr") (:whitespace " ") (:string "\"ds.color-lightbox.add\""))
"(meta)=>" nil
#2020-01-2119:16carocadmmmm that is weird …. if I execute the code below on parcera itself all forms have metadata:
(for [node (tree-seq seq? seq (parcera/ast (slurp "./src/clojure/parcera/core.cljc")))
:when (seq? node)
:when (not (contains? #{:whitespace :comment} (first node)))]
(let [code (parcera/code node)]
[(meta node) (str (subs code 0 (min (count code) 10))
" ... ")]))
could you give that a try and let me know ?#2020-01-2119:25niwinzstrange, this code works as expected yes...#2020-01-2119:25niwinzi need to investigate more...#2020-01-2119:26carocadparcera should give you metadata on all forms. However, the metadata is only attached to the parser rules, for example [:symbol "hello"] has metadata but "hello" does not. Maybe you are trying to extract it on the wrong place ?#2020-01-2119:28niwinzyeah, im aware of that, I'm trying extract metadata from (:list (:symbol "tr") ...)#2020-01-2119:29carocadlet me know if this turns out into a bug 😉#2020-01-2119:30niwinzok, thanks!!#2020-01-2119:32niwinzim using walk/postwalk, is the unique difference to your code, maybe postwalk is doing something that i don't expect... I go to try with tree-seq...#2020-01-2119:39niwinzYep, i confirm, postwalk is stripping metadata, sorry for bothering!#2020-01-2119:58carocadoh yeah I think I heard sometime ago about that bug in postwalk. afaik there is a jira ticket for in on clojure core#2020-01-2119:59carocadseems it was fixed: https://clojure.atlassian.net/browse/CLJ-2031#2020-01-2115:16Alex Miller (Clojure team)Take the 2020 Clojure Community Survey now! https://surveymonkey.com/r/clojure2020 We greatly appreciate your feedback and all results will be released. Survey ends this Thu Jan 23....#2020-01-2119:17miroHello Everyone! Just finished a new blog post (aka tutorial): https://www.titanoboa.io/java-repl.html
As you may (or may not) know, my workflow platform tianoboa is also trying to be friendly to java programmers with limited (or no) clojure experience.
So to try to bring the clojure experience to the java masses, I created also a REPL for java lambdas (yay!) in titanoboa's GUI. This post explains how it works and how you can use it.#2020-01-2302:51practicalli-johnThis channel is for announcing releases of new libraries and their majore updates.
Please post articles, tutorials in the #news-and-articles channel.
Thank you.#2020-01-2213:09LuFork v1.2.4 - Form library for reagent & re-frame. 🍴
With this version, you can now debounce OR throttle your send-server-request handler, used for live input validation (server side) or any server operation really
https://github.com/luciodale/fork#2020-01-2214:59wilkerlucio[com.wsscode/edn-json "1.0.3"] is out! New things on this version:
- Support for json-like encoding, this works the same as the previous encoder, but returns massaged EDN instead of native JSON, this way this fn can also run in CLJ environments
- Add option to enable/disable special list types encoding
- Documentation updated with new things.
Check it out at: https://github.com/wilkerlucio/edn-json#2020-01-2219:13metehanhttps://gitduck.com/watch/5e2887db94bb32d590d04e3e I am streaming my code if somone interested in re-frame you can watch and chat with me 🙂#2020-01-2302:54practicalli-johnThis channel is for new projects and libraries and any major updates.
Please post live coding, articles, tutorials in the #news-and-articles channel. Or if broadcasts scheduled in advance then use the #events channel.
Thank you.#2020-01-2221:35mikethompsonLein middleware which computes version from the ambient Git context (think tags)
lein-git-inject has now reached version 0.0.11
It now feels feature complete and stable
https://github.com/day8/lein-git-inject#2020-01-2304:12Alex Miller (Clojure team)Have you completed the State of Clojure Community Survey yet? If not, now's a good time! https://surveymonkey.com/r/2020clojure#2020-01-2319:31borkdudesci, a Clojure interpreter for the JVM/GraalVM/NodeJS/browser, used in tools like babashka, bootleg, malli and dad, v0.0.12
https://github.com/borkdude/sci/releases/tag/v0.0.12
follow up in #babashka#2020-01-2404:08caioJust released the first stable version of tank, a pure Clojure lightweight library of fault tolerance idioms
https://github.com/caioaao/tank#2020-01-2410:10Jivago Alves@U0GRKUGLQ I’m just curious if you are aware of https://github.com/resilience4clj and if so what would be the reason you created tank for. Thanks for the library though!#2020-01-2421:01caiohey Jivago! No, I didn't know this. looks pretty good#2020-01-2521:19Jivago AlvesPlease feel free to take a closer look. Perhaps mention it as an alternative to your library on your README and when we should use yours instead. Thanks!#2020-01-2603:45caioYeah, I'm planning on doing that. It didn't exist when I first released tank, so maybe tank is actually obsolete now, since resilience4clj seems to have a lot more features. Anyway I'll take a closer look at the project when I have the time :)#2020-01-2917:56caio@U4L16CHT9 can you help us out here? 🙂#2020-01-2918:09luchini@U0GRKUGLQ nice work on tank. You can learn more about resilience4clj here: https://www.youtube.com/watch?v=KtN0vqOlmn8#2020-01-2409:56mike_ananevHi! Just releaeed the Simple Library template (slib) for clj-new. This template is based on clj-new and Badigeon tools and can run common tasks (as Leiningen does):
• build jar,
• compile java sources,
• create pom,
• sign jar file
• local install to .m2
• deploy jar to clojars
• run tests using kaocha
https://github.com/mikeananev/slib#2020-01-2409:59sogaiulooks very interesting! thanks for sharing.#2020-01-2415:09Alex Miller (Clojure team)thx! I tried the github template path and it failed for me with
Execution error (ExceptionInfo) at clj-new.helpers/resolve-remote-template (helpers.clj:149).
Could not load artifact for template: slib
Tried coordinates:
[slib/boot-template "RELEASE"]
[slib/lein-template "RELEASE"]
#2020-01-2415:10Alex Miller (Clojure team)I'm using clj-new 0.8.5, which is the version in the clj-new readme#2020-01-2415:53mike_ananev@U064X3EF3 hi! What command did you use to run?
try this command (from doc) :
clj -A:new https://github.com/mikeananev/slib@3c427a64ec03fcf618b9e55559345e76e08e8b76 qwerty/asd#2020-01-2415:53mike_ananevI have clj-new 0.8.5#2020-01-2415:55Alex Miller (Clojure team)that's what I ran#2020-01-2415:55Alex Miller (Clojure team)$ clj -A:new qwerty/asd
Failed with: org.apache.maven.repository.internal.DefaultModelResolver.<init>(org.eclipse.aether.RepositorySystemSession,org.eclipse.aether.RequestTrace,java.lang.String,org.eclipse.aether.impl.ArtifactResolver,org.eclipse.aether.impl.VersionRangeResolver,org.eclipse.aether.impl.RemoteRepositoryManager,java.util.List)
Execution error (ExceptionInfo) at clj-new.helpers/resolve-remote-template (helpers.clj:149).
Could not load artifact for template: slib
Tried coordinates:
[slib/boot-template "RELEASE"]
[slib/lein-template "RELEASE"]
Full report at:
/var/folders/2k/2l7ch1xn7lb5gj86tgp1ygww0000gn/T/clojure-13105343161273067757.edn
#2020-01-2415:56Alex Miller (Clojure team)oh, I may have a hacked up env, hang on#2020-01-2416:01Alex Miller (Clojure team)taking this to #tools-deps#2020-01-2410:01mike_ananevHere is another one for building uberjars.
https://github.com/mikeananev/sapp#2020-01-2410:11sogaiui'm not much of an nrepl user myself, but from the deps.edn files it looks like both slib and sapp support a convenient way to start an repl repl. i didn't notice that in the docs.
perhaps it'd be worth mentioning?
in any case, this looks nice too :thumbsup:#2020-01-2412:50blueberryNew release, 0.15.0, of the DLFP book, with a chapter on classifying IMDB sentiments with the deep network you develop and train with software where you wrote every single piece of Clojure code.
https://aiprobook.com/deep-learning-for-programmers?source=cslack&release=0.15.0#2020-01-2417:41practicalli-johnBook and book updates are more effectively communicated in the #news-and-articles channel. Please use that channel for messages like this to to avoid annoying the community. Thank you#2020-01-2420:07hindolExercism is looking for additional maintainers. Perhaps you can help flesh out the exercises for the Clojure track?
https://twitter.com/exercism_io/status/1215288391656448000?s=20#2020-01-2510:33mike_ananevSimple metrics library release.
https://github.com/redstarssystems/metrics#2020-01-2523:56danielcomptonhttps://www.clojuriststogether.org/news/q1-2020-funding-announcement/ Clojurists Together (thanks to our generous members) is thrilled to be supporting Reagent, Ring, Fireplace, and Calva with $9,000 each over the next three months#2020-01-2608:52pezThis is wonderful! I'm so happy and grateful that @U9A1RLFNV took this on and that Clojurists Together decided to fund him. I will support the effort with time i can free up. Calva will improve and its foundations will strengthen, which is a very good thing for vscode Clojurians.#2020-01-2710:35borkdudeclj-kondo v2020.01.27: better detection of missing test assertions and other enhancements. follow up in #clj-kondo.
https://github.com/borkdude/clj-kondo/releases/tag/v2020.01.27#2020-01-2721:06carocadparcera v0.11.1 is out with a minor bug fix for metadata.
https://github.com/carocad/parcera#2020-01-2721:09yogthosJetBrains is having a developer survey, let them know you're using Clojure :) https://surveys.jetbrains.com/s3/a10-developer-ecosystem-survey-2020#2020-01-2722:19p-himikA hundred of development-related questions, then suddenly: "Do you possess a Cryptocurrency?"#2020-01-2723:22yogthos😆#2020-01-2804:53Vincent CantinThe last page (of the optional part) was a psychology test.#2020-01-2805:09p-himikYeah, such questions make sense when they're in the optional part.
But whether I have and whether I want to have cryptocurrency, in the main section? I don't know about that.#2020-01-2808:19markusWow that was a long one. Pretty good though, except some repeated or very similar questions.
I wonder why there were so many questions about personality and world view.#2020-01-2810:01MattiasHmm. Didn’t get (or notice...) any crypto question. Maybe it was smart enough to figure out the answer in advance. 🙂#2020-01-2816:24dharriganThat puzzled me too.#2020-01-2901:55wilkerlucio[com.wsscode/edn-json "1.0.4"] is out! New things on this version:
- Add support for ::encode-value for custom value encoding
- Add support for ::encode-map-key for custom map keys encoding
Check it out at: https://github.com/wilkerlucio/edn-json (edited)#2020-01-2902:00p-himikThe README says: "Transit produces JSON suitable for faithful round-trips in and out of EDN types, but it’s not good for consuming as JSON."
Could you explain why Transit is not good for consuming as JSON?#2020-01-2902:02p-himikOne thing I'd guess is that it represents maps as arrays.#2020-01-2902:13wilkerlucioyup 🙂#2020-01-2902:14wilkerluciothe idea of this library is to be a middle term between preserving the original EDN and making it confortable for JSON tools to work with#2020-01-2902:15wilkerlucioone way to look at is, is imagine a version of clj->js that can reverse EDN later with more fidelity, makes sense?#2020-01-2902:17p-himikYeah, thanks.
A strange thing I just noticed:
(= (edn->json :keyword) "__edn-value|:keyword")
(= (edn->json {:foo 42}) #js {":foo" 42})
By itself, a keyword is encoded, but as a key map, it is not. It makes it indistinguishable from strings that start with a colon.#2020-01-2904:07wilkerlucioyeah, that's a trade-off I was willing to make, given how common those are in the clojure world and how rare they are for regular JSON cases, more info: https://github.com/wilkerlucio/edn-json#encoding-decisions#2020-01-2909:33niwinzTransit has :json-verbose option that conserves the structure (don't uses lists for objects...) and is pretty comfortable to parse as json...#2020-01-2909:36niwinzEncoding {:foo "bar", :baz [1 2]} looks like {"~:foo":"bar","~:baz":[1,2]}#2020-01-2909:37p-himikOh, that's right! I completely missed that :json and :json-verbose differ in more than keyword caching.#2020-01-2909:38p-himikAh, not so fast - it still uses an array if there are composite keys.#2020-01-2909:39p-himik{[0 1] 2} becomes {"~#cmap":[[0,1],2]}.#2020-01-2909:42niwinzseesm something very unusual when you using a data structure that you have in mind share with "javascript" (or to be interporable with json...)#2020-01-2916:51lurodrigoHi folks! Released [polvo/firestore-clj "0.1.3"] It's a client for Google's Firestore database. It's quite idiomatic, supports both pulling data once and real-time data by materializing query results as atoms (and some lower-level stuff to). All functions are type-hinted so there's no reflection behind the scenes. Check it out at https://github.com/polvotech/firestore-clj#2020-01-2923:22borkdudebabashka, a native Clojure scripting tool, v0.0.67 adds clojure.test, hierarchies, multimethods and more:
https://github.com/borkdude/babashka/releases/tag/v0.0.67
follow up in #babashka#2020-01-3121:01borkdudeTwo bugfixes and one new feature:
https://github.com/borkdude/babashka/releases/tag/v0.0.68#2020-01-3021:56Alex Miller (Clojure team)tools.deps.graph 0.2.30 is now available and fixes an issue with --size and git deps#2020-01-3104:08Alex Miller (Clojure team)tools.deps.alpha 0.8.661 and clj 1.10.1.507 are now available
• New: concurrent downloads make things significantly faster when downloading lots of stuff
• New: -Sthreads can be used to explicitly set the concurrency level, but you generally shouldn't need it
• New: -- can be used in clj as a separator between clj dep args and clojure.main args. For example clj -A:tool -- -A:foo will activate the tool alias, which may specify a main class, then -A:foo will be passed to that program (thanks Dominic Monroe!)
• Fix: regression in -Spom not populating <repositories> since tda 0.8.573
• Fix: manifest type lookup on resolved git dep coordinates (probably of interest to almost no one, but affected tools.deps.graph) #2020-01-3107:01CrispinBootleg 0.1.7 released. Now with support for XML output, environment variables, command line args, standard in processing and java.time!
https://github.com/retrogradeorbit/bootleg#2020-01-3114:07mauricio.szaboJust published Chlorine 0.4.3 for Atom. On this release, support for Suitable ClojureScript autocomplete (if its on the classpath), some fixes for autocomplete (sometimes it did crash the editor!) and some other small fix 🙂. Discussions on #chlorine#2020-01-3120:34lurodrigo[polvo/firestore-clj "0.3.0"] released.
Now with support for batched writes and transactions, and finer control over representation of results as clojure data. Also, update and map -like helpers for transactions that fit the "apply function on field/doc/many docs" model
https://github.com/polvotech/firestore-clj#2020-02-0211:32borkdudejet, a command line tool to convert between JSON, EDN and Transit v0.0.11: finally a Windows build!
https://github.com/borkdude/jet/releases/tag/v0.0.11#2020-02-0312:36Ivar Refsdal[ivarref/datomic-schema "0.2.0"] is released.
This library provides a reader literal to make writing Datomic schemas easier and more succinct.
It plugs well into both REPL usage and io.rkn/conformity.
This is the first time I'm announcing a library I've written. Yay!
https://github.com/ivarref/datomic-schema#2020-02-0323:44steveb8nthis is great. I did something similar using spec https://gist.github.com/stevebuik/17ed50824f1bb814fab9e556a37cf18a but I like your idea more#2020-02-0521:59Ivar RefsdalThanks 🙂#2020-02-0422:12lispycloudsReleased 0.5.0 of https://github.com/lispyclouds/clj-docker-client
- Adds support for bidirectional socket I/O from attaching to containers (something only the official Go and Python libs can; and now Clojure can too! 😎)
- Configurable timeouts for daemon connections.
- Ability to handle undocumented/experimental docker APIs
- Document usage with REBL
Follow up in #docker#2020-02-0507:41jacekschaeClojureScript Podcast is back with a 3rd season! This season is all about build tools! First episode with Phil Hagelberg, creator of Lein https://clojurescriptpodcast.com/#2020-02-0508:28borkdudeawesome! been waiting for new Clojure podcasts#2020-02-0514:00practicalli-john@U8A5NMMGD Ideally posts about blogs, podcasts, videos should be posted to the #news-and-articles channel of this slack community, making those posts easier to find.
Great to have you back for a 3rd season.#2020-02-0515:26jacekschaeSeems like I have been caught by the Clojurians Police 🚨 Will do Sir! Thanks for letting me know 👍#2020-02-0517:00practicalli-johnWe are very friendly 'police' and trying to make sure the right people can find your content in this fast moving stream of data that is Clojurians Slack as well as finding it on the two archives (zulip and clojurians-log) 😁#2020-02-0509:57dominicmI did some timings on the effects of direct function use a vs indirect use #(a). I uploaded the results and scripts to https://github.com/SevereOverfl0w/direct-performance
I wanted to know if making code REPL friendly is bad for performance, and if so, how bad?#2020-02-0513:28vemvmy usual complaint against (def a b) and friends is loss of metadata, which is why if the pattern is absolutely needed, I'd use Potemkin for the wrapping#2020-02-0516:06dominicmTbh, in this case you can use a directly for benchmark. I'm trying to reference the notion of passing the function value to another function, eg a Web server#2020-02-0515:25blueberryReleased ClojureCL 0.14.0: High Performance Computing and GPGPU in Clojure: access the supercomputer on your desktop - https://clojurecl.uncomplicate.org#2020-02-0515:37blueberryClojureCUDA 0.9.0 has just been released, bringing the support for #CUDA 10.2. High-performance GPU computing in Clojure!
https://clojurecuda.uncomplicate.org#2020-02-0515:52blueberryNeanderthal 0.27.0 released, with support for latest #CUDA 10.2.
Fast native-speed matrix and linear algebra in #clojure
Supports all mainstream hardware: CPU, Nvidia GPU, and AMG GPU in the same process, interactively!
https://neanderthal.uncomplicate.org#2020-02-0517:11yogthosStack Overflow 2020 developer survey is now open https://stackoverflow.blog/2020/02/05/the-2020-developer-survey-is-now-open/#2020-02-0517:59seancorfieldGiven that Clojure isn't listed as an option in that survey and needs to be written in, this is a case where the broadest audience possible for the announcement is reasonable. As an Admin, I agree that in general posts about surveys/blogs/podcasts etc do not belong here.#2020-02-0520:48yogthosI think this is a very important survey as SO is very widely used, what would be a better channel to put this in?#2020-02-0523:22seancorfield@U050CBXUZ As far as I'm concerned, this was appropriate for #announcements#2020-02-0523:22yogthos👍#2020-02-0523:23yogthosmisread your comment initially :)#2020-02-0601:37mauricio.szaboHello, just published the Atom package for Clojure/Script Chlorine version 0.4.4. In this version, not much for Clojure people, but for ClojureScript + Shadow-CLJS, there's an experimental feature (you need to check the configuration on settings): it adds a new way to evaluate ClojureScript that's probably faster, more reliable, and can, in the future, add lots of interesting features.
Discussions on #chlorine channel#2020-02-0614:30lurodrigo[polvo/firestore-clj "1.1.2"] released. since last announcement lots of stuff was added. now with full support for subcollections, cursors, print methods making repl experimentation more convenient, and a few more convenience functions, including streaming updates as manifold streams, getting the changes between snapshots as clojure data, and batched coll deletion. by now I think we've covered almost all features provided by the original Java API, and further releases are going to be mostly for minor additions and bug fixing https://github.com/polvotech/firestore-clj#2020-02-0709:44Alex FedotovHey there! ✌️ My name is Alex, I’m a product designer at Miro (http://miro.com) — the online collaborative whiteboarding platform for distributed teams. We want to make the 1st session in our product better, and if you haven’t used Miro before, I’d like to invite you to participate in a quick usability testing. If you’re open to taking part in my small research, please go through invitation form ☺️
https://miro-survey.typeform.com/to/TlRH2r#2020-02-0709:45imreHey Alex, welcome. Please read the channel topic, I believe this message belongs to a different channel.#2020-02-0817:35hlshipwalmartlabs/vizdeps 0.2.0
vizdeps is a Leiningen plugin that uses Graphviz to present your project's dependency tree as a diagram. It's especially useful for identifying and resolving version conflicts.
This release of vizdeps works with Leiningen 2.8 and above.
https://github.com/walmartlabs/vizdeps#2020-02-0917:06hlshipIt's also still compatible with 2.7.1.#2020-02-0817:35hlshiphttps://github.com/walmartlabs/vizdeps#2020-02-0821:41tony.kayI’m happy to announce that Fulcro RAD now has an alpha-quality release. Fulcro RAD is a set of rapid-application development libraries that allow you to select a storage back-end (e.g. SQL, Datomic, etc.), a default rendering front-end (e.g. Semantic UI Web, Bootstrap Web, React Native, Electron, etc.) and generate everything from database schema, to a network API, to a fully-functioning UI.
This first release has support for forms, a single web renderer, and Datomic (with SQL in the works). Adapters and plugins should be relatively trivial to implement for any React-based UI, and storage system.
https://github.com/fulcrologic/fulcro-rad
https://github.com/fulcrologic/fulcro-rad-datomic
https://github.com/fulcrologic/fulcro-rad-sql
and there is a start on a developer’s guide here: http://book.fulcrologic.com/RAD.html
NOTE: This is very alpha software; however it is already capable of doing reasonably complex full-stack forms in new or existing Fulcro applications. I’m working rapidly to make the documentation more complete, and the demo easier to run.
https://github.com/fulcrologic/fulcro-rad-demo#2020-02-0916:25vemvhttps://github.com/nedap/utils.modular 's implement allows you to:
* Use metadata-based protocol extension (for a flawless Reloaded workflow) in a less error-prone manner
* accordingly, use Sierra's Component library without defrecord (an usual perceived source of verbosity)
* also accordingly, use spec-backed, plain, reusable defns whereas one would otherwise use defrecord and friends, which aren't as tight.
There's a handful of similar functions in the lib. Hope some find it useful!#2020-02-0916:31vemvThe idea of metadata-based Reloaded comes from an answer I got in Clojurians a year ago for the described problem. Thanks!
Has been a smooth trip. It's been satisfying to use older libs (like Component) with newer techniques, as opposed to replacing the libs altogether.
As a possibly interesting observation, when something seems flawed maybe it just needs some incremental work, instead of rework.#2020-02-0919:19just.sultanovHi, there! I just published a library for unified responses for the Clojure and ClojureScript. The practice of using this approach in several projects has proven to be very convenient and flexible. https://github.com/just-sultanov/clj-unifier#2020-02-0920:38dominicmThis is pretty neat, do you have included keyword sets that are supported? Eg cognitect anomalies?#2020-02-0920:47just.sultanov@U09LZR36F In my projects I used keyword sets (from @U072WS7PE’s talk about bias decisions), but for the shared library I decided not to restrict users#2020-02-1002:31cjsauerThis is really clever. Thanks for sharing. #2020-02-1003:13cjsauerLooking at the code, this seems like it could be a general replacement for exceptions. It reminds me of the Result type in Rust. #2020-02-1008:13dominicm@U1EQNSHL4 it would be pretty handy for users to include some. Not as a restriction, but to reduce boilerplate in applications. You already have a bunch of keys you can use that way.#2020-02-1008:21just.sultanov@U09LZR36F Thank you for your feedback. I want to add thread macro like a some-> and some->> for pipelines. And I can add something like this:#2020-02-1008:22just.sultanovcommon response types#2020-02-1008:22just.sultanov(def success-types
"Unified common `success` types."
[:success :ok :created :accepted])
(def error-types
"Unified common `error` types."
[:error :unavailable :interrupted :incorrect :forbidden :unsupported :not-found :conflict :fault :busy])
#2020-02-1008:23just.sultanovand http status types#2020-02-1008:24just.sultanov(def informational-status-codes
"HTTP `informational` 1xx status codes."
{:continue 100
:switching-protocols 101
:processing 102
:early-hints 103})
(def success-status-codes
"HTTP `success` 2xx status codes."
{:ok 200
:created 201
:accepted 202
:non-authoritative-information 203
:no-content 204
:reset-content 205
:partial-content 206})
(def redirection-status-codes
"HTTP `redirection` 3xx status codes."
{:multiple-choices 300
:moved-permanently 301
:found 302
:see-other 303
:not-modified 304
:use-proxy 305
:switch-proxy 306
:temporary-redirect 307
:permanent-redirect 308})
(def client-error-status-codes
"HTTP `client error` 4xx status codes."
{:bad-request 400
:unauthorized 401
:payment-required 402
:forbidden 403
:not-found 404
:method-not-allowed 405
:not-acceptable 406
:proxy-authentication-required 407
:request-timeout 408
:conflict 409
:gone 410
:length-required 411
:precondition-failed 412
:request-entity-too-large 413
:request-uri-too-long 414
:unsupported-media-type 415
:requested-range-not-satisfiable 416
:expectation-failed 417})
(def server-error-status-codes
"HTTP `server error` 5xx status codes."
{:internal-server-error 500
:not-implemented 501
:bad-gateway 502
:service-unavailable 503
:gateway-timeout 504
:http-version-not-supported 505})
(def response-type->http-status
"HTTP status codes."
(merge informational-status-codes
success-status-codes
redirection-status-codes
client-error-status-codes
server-error-status-codes))
(def http-status->response-type
"Mapping http status to response type."
(set/map-invert response-type->http-status))
(defn to-status
"Returns a http status by the given response type."
[response-type]
(get response-type->http-status response-type))
(defn to-type
"Returns a response type by the given http status."
[http-status]
(get http-status->response-type http-status))
(def default-success-type
"Default unified http `success` type."
:ok)
(def default-client-error-type
"Default unified http `client error` type."
:bad-request)
(def default-server-error-type
"Default unified http `server error` type."
:internal-server-error)#2020-02-1008:27just.sultanov@U09LZR36F Will it be convenient for you? For me, yes :)#2020-02-1008:37dominicmI think that would be handy yeah :). Do you usually write your keywords in a http style?#2020-02-1008:42just.sultanovNo, I have a mapper for business logic keywords with HTTP keywords. And this transformation takes place in one single place. Very comfortably#2020-02-1008:43just.sultanovE.g. :incorrect -> :bad-request#2020-02-1008:49just.sultanovI have one pubic API for my business logic with general response types and several mappers, e.g. for HTTP and WebSocket.#2020-02-1008:50just.sultanovI want to add a similar example to the README#2020-02-1015:12just.sultanovI added -> “thread-first” and ->> “thread-last” macros in the latest release (v0.0.5)#2020-02-1000:01CandidJoker v0.14.2 has been released: https://github.com/candid82/joker/releases/tag/v0.14.2#2020-02-1000:13mauricio.szaboJust published a new version of Socket REPL plugin for Atom, Chlorine.
On this version, if you're using Shadow-CLJS, it will show the result of promises when they're resolved! Now, there's still work to do (it's behind "experimental features config" after all) as inline results don't get updated, but on the Console tab, you'll see promises on JS changing from "pending" to their values when they become ready. Discussions, bugs, ideas on #chlorine channel.#2020-02-1116:16chrisnlibpython-clj has been undergoing quite a bit of development. There is now extensible datafy/nav support for python modules and classes. We have much better (but still imperfect) environment support. We have a clj-template so you can use Sean Corfield's clj-new system.
We also spent some time profiling things to make sure we pay as little of a cost as possible for crossing the language boundaries. The cost is still there of course but we reduced it by a factor of at least 3 or so.
We moved GC to be cooperatively done in the python thread. So if you want to use python from only on clojure thread that is now possible.
Carin Meier has been doing quite a few demonstration projects using Nextjournal. I really suggest checking those out as you can simply hit 'remix' and start playing with the code. If you haven't checked out Nextjournal in general then by all means, it is a great system for online live-notebook coding.
• Changelog: https://github.com/clj-python/libpython-clj/blob/master/CHANGELOG.md
• Github Org: https://github.com/clj-python/
• Carin's NextJournal Page - https://nextjournal.com/gigasquid/
• Kommen's NextJournal Page - https://nextjournal.com/kommen
Enjoy 🙂#2020-02-1116:40p-himikA few questions:
1. Can it be considered production-ready? E.g. no breaking changes are expected.
2. Python 3.7 is supported, right?
3. Imagining that there's Jython 3 (there isn't), would libpython-clj be better? If so, how?
4. Same question about graalpython (assuming I decide to run everything on GraalVM).
I couldn't quickly find answers in the repo's README and in the links that I've visited.#2020-02-1120:53chrisn1. Yes, the interface hasn't changed for a while.
2. Yep. The system is python-version independent, you can select the python you want on initialization.
3. libpython-clj runs cpython with all the extensions. Jython, for instance, doesn't support numpy and definitely doesn't support things like mxnet and such.
4. See response above. The C layer of python requires the interpreter to load the extensions. Without reimplementing a significant portion of the interpreter (which Graal people may do but Jython people can't) you can't load the C extensions. #2020-02-1120:54p-himikThanks!#2020-02-1116:54plexusAnnouncing Regal, like Hiccup but for regex. Cross-platform CLJC and able to create test.check generators. This is very much a preview/alpha release. Breakage expected, input and feedback (and contributions) welcome! For now only available through Github. Follow-up in #lambdaisland please. https://github.com/lambdaisland/regal#2020-02-1116:55Noah BogartDang, this looks cool as heck#2020-02-1117:01kennyYeah, this looks awesome!#2020-02-1117:22nateWow!#2020-02-1117:26pezThis is so cool!#2020-02-1117:28fmnoiseawesome stuff!#2020-02-1201:41bartukaWooow, congrats!!!#2020-02-1209:22plexusThe generator namespace should actually load now :) thanks @U04V15CAJ for reporting#2020-02-1219:07EddieFantastic! This will be very useful.#2020-02-1808:12marcusYeah, it is great!#2020-02-1808:15marcusIs there currently a way or plans for predefined character classes, e.g. \s (space, tab, ...) ?#2020-02-1117:16dchelimskyCognitect Labs' aws-api 0.8.430 https://groups.google.com/forum/#!topic/clojure/U9chWFVDC_g#2020-02-1323:12hlshipcom.walmartlabs/lacinia 0.36.0 and com.walmartlabs/lacinia-pedestal 0.13.0
Lacinia is an open-source implementation of Facebook's GraphQL specification, in Clojure.
GraphQL is an outstanding approach to getting diverse clients and servers exchanging data cleanly and efficiently.
GitHub repo: https://github.com/walmartlabs/lacinia
Documentation: https://lacinia.readthedocs.io/en/latest/
Featured changes in 0.36.0:
- Improved support for parsing/serializing enums
- Query execution can now be limited with a timeout
- Improved efficiency when parallelizing query execution across threads
lacinia-pedestal adds support for accessing GraphQL as an HTTP endpoint
GitHub repo: https://github.com/walmartlabs/lacinia-pedestal
Documentation: https://lacinia-pedestal.readthedocs.io/en/latest/
Featured changes in 0.13.0:
- Exeptions during query execution are now caught and result in a 500 status response
- Added support for setting the subscription initial payload#2020-02-1406:39orestisMany thanks for working on Lacinia! We are really happy with it. #2020-02-1415:03katoxHi everyone,
I am pleased to announce the first release of neanderthal-stick 0.1.0 - save/load extensions to Dragan's Neaderthal matrix library. The focus of Neanderthal-stick is saving neanderthal data to a disk and importing them back fast and with as little ceremony as possible.
Note that Neanderthal-stick is able to save the data that are currently on the GPU and load them elsewhere (or vice versa) - switching native/CUDA/OpenCL contexts as necessary.
The library uses Nippy under the hood to store the metadata and pure direct buffers to save the actual contents of vectors or matrices. It doesn't attempt to support any of myriads of existing data formats that are used in the wild but it can be used as a support code if anyone wanted to do that.
Gihub: https://github.com/katox/neanderthal-stick/
Dependency info: https://clojars.org/neanderthal-stick#2020-02-1417:49FrederikAwesome, really useful piece of functionality!!#2020-02-1419:42dchelimsky[ANN] Cognitect Labs' aws-api 0.8.437 is now available! https://groups.google.com/forum/#!topic/clojure/AIQzOkhUDBU#2020-02-1421:09Jarrod Taylor (Clojure team)[ANN] https://github.com/JarrodCTaylor/schema-cartographer Schema Cartographer provides a means to visualize, navigate, create, edit and share the relationships that exist in your Datomic schema.#2020-02-1508:49bozhidar[ANN] CIDER 0.24 (“India”) is out! Check out the release notes here https://github.com/clojure-emacs/cider/releases/tag/v0.24.0 Enjoy!#2020-02-1510:42borkdudeclj-kondo v2020.02.15: return type inference, unsorted required namespaces linter and more. thanks to all who contributed.
https://github.com/borkdude/clj-kondo/releases/tag/v2020.02.15
follow up in #clj-kondo#2020-02-1604:26tony.kayI’ve released Fulcro 3.1.12 to clojars. Fulcro is a library for building data-driven full-stack applications for React web/native.
https://github.com/fulcrologic/fulcro
This version includes support for floating roots. Fulcro normally has you construct your app as a reified view in code and data. This has worked very well for the many apps we’ve built with it, but occasionally you want to use a plain React js lib that expects an arbitrary sub-root to be usable as a standalone thing. This release allows you to have Fulcro control the data needs of such components while allowing them to look like vanilla React components. This should allow easier use of things like js ecosystem routers and navigators.
See the docstrings here for instructions: https://github.com/fulcrologic/fulcro/blob/develop/src/main/com/fulcrologic/fulcro/rendering/multiple_roots_renderer.cljc#2020-02-1611:36dominicmhttps://github.com/SevereOverfl0w/vizns Vizns is a tool for visualizing the relationship between namespaces and libraries. You can see a demo of it running on an open source Clojure application at https://dominic.io/vizns/camelot/root.svg You can click on nodes to navigate around (hint: You may need to scroll a little, as you'll start in the top left in your browser).#2020-02-1721:44djanusHello! After more than 3 years in the making, I am proud to announce the release of Skyscraper 0.3.0, a scraping framework that helps you build structured dumps of whole websites.
Home: https://github.com/nathell/skyscraper/
Major improvements in 0.3.0:
• Skyscraper has been rewritten from scratch to be asynchronous and multithreaded, based on core.async.
• Skyscraper now supports saving the scrape results to a SQLite database.
• In addition to the classic scrape function that returns a lazy sequence of nodes, there is an alternative, non-lazy, imperative interface (`scrape!`) that treats producing new results as side-effects.
• reaver (using JSoup) is now available as an optional underlying HTML parsing engine, as an alternative to Enlive.
See NEWS.md for a complete list.
I’m particularly happy about the database abilities of this release – for a glimpse of what it can do, see https://cljdoc.org/d/skyscraper/skyscraper/0.3.0/doc/database-integration.
Happy scraping! 🏛️#2020-02-1815:22Alex Miller (Clojure team)InsideClojure - 1.0 all the things https://insideclojure.org/2020/02/18/lib-version/ - please read if you maintain a Clojure lib (discussion to #clojure)#2020-02-1815:28gerredthanks for this @U064X3EF3. maybe a bit parallel to the thoughts here. what I did appreciate is how @U0ENYLGTA laid out exactly the versioning scheme that aws-api and service packages use. I agree with what you're saying there, I would suspect it's a lot of people defaulting to what they see in other ecosystems, even prior to semver, when they see 0.x. with that aws-api versioning scheme well known, I wouldn't particularly care if it was 0.x or 1.x or 2.x or whatever.#2020-02-1815:28gerredheck, a lot of projects (see the ill-fated CoreOS) use time since their epoch for versions#2020-02-1815:30gerredto avoid parroting you further, gets me thinking about for my projects writing a "Versioning Scheme" section in the readme, even if it's only a sentence or two, to make it obvious why a version changes when it does.#2020-02-1815:32dchelimsky@U05509S91 that would be great. There seems to be an expectation that Semver is the default. Being explicit about it (even if what you're saying is "we do semver" is a good thing IMO.#2020-02-1815:35vlaaadhaving version like v2020.02.18 seems clear enough an indicator that it’s not a semver#2020-02-1815:35dchelimskyFor the next few hundred years, sure 😉#2020-02-1815:38gerredeven in that (ok, expand to versioning policy) - it's nice to know the policy around those versions if there is one, or that it's just "date when we kicked this out to maven"#2020-02-1815:39gerrednot to make anyone stare into the void of Kubernetes and turn to stone, but over in our operator project we have an entire enhancement proposal around how we version: https://github.com/kudobuilder/kudo/blob/master/keps/0019-package-api-versioning.md#2020-02-1815:39gerredi digress. 😄 thanks @U064X3EF3 for the post!#2020-02-1815:42Alex Miller (Clojure team)I'm adding this to contrib lib readmes as I change them: "This project follows the version scheme MAJOR.MINOR.COMMITS where MAJOR and MINOR provide some relative indication of the size of the change, but do not follow semantic versioning. In general, all changes endeavor to be non-breaking (by moving to new names rather than by breaking existing names). COMMITS is an ever-increasing counter of commits since the beginning of this repository."#2020-02-1821:17Alex Miller (Clojure team)Per the previous post, there are some new contrib releases today:
• core.async 1.0.567
• tools.gitlibs 1.0.83
• data.csv 1.0.0
• data.json 1.0.0
• core.logic 1.0.0
• core.match 1.0.0
• data.zip 1.0.0
• java.classpath 1.0.0
• tools.namespace 1.0.0
• data.generators 1.0.0
• test.generative 1.0.0
• data.priority-map 1.0.0
• java.jmx 1.0.0
• test.check 1.0.0
• data.fressian 1.0.0
• tools.analyzer 1.0.0 - thanks Nicola!
• tools.analyzer.jvm 1.0.0 - thanks Nicola!#2020-02-1821:18Alex Miller (Clojure team)and prob a few more over the coming days, but that's mostly it#2020-02-1823:49gerred@U064X3EF3 wdyt about a 1.x.x of https://github.com/cognitect/transit-clj ?#2020-02-1823:49gerredor as before, clarification of version policy 😉#2020-02-1823:59Alex Miller (Clojure team)Sure, will loook at it later#2020-02-1907:21bedersIt’s a good thing. Well done #2020-02-1909:24rickmoynihanjust a minor FYI: the test.check changelog hasn’t been updated:
https://github.com/clojure/test.check/blob/master/CHANGELOG.markdown#2020-02-1913:35Alex Miller (Clojure team)Fixed#2020-02-1913:35Alex Miller (Clojure team)@U05509S91 released transit-java and transit-clj yesterday #2020-02-1913:36gerredthank you sir!#2020-02-1914:59avocadeHehe love it.
There's always a different between what's right (`semver is borked`), and what's otherwise conventional in the "business" (e.g. what clojure newbies will assume). Good call 🙂#2020-02-1915:07aviJust curious… if the new versioning scheme is MAJOR.MINOR.COMMITS then why do almost all of these version identifiers have a third segment that’s 0?#2020-02-1915:13Alex Miller (Clojure team)older projects started that way and it's been easier to just retain that than move to the commit scheme (which currently requires a manual step)#2020-02-1915:14Alex Miller (Clojure team)on the infinite todo list is better automation that works with the contrib build box setup, and then it would be easier to move to that#2020-02-1915:15Alex Miller (Clojure team)I've updated readme's on those projects above as I released to describe the version scheme (whichever it is)#2020-02-1915:18aviAh, I see. Makes sense. Thanks!#2020-02-1921:38gerredfound another possible one, cc @U04V70XH6 https://github.com/clojure/tools.cli#2020-02-1921:38gerredoh#2020-02-1921:39gerred@U04V70XH6 literally just updated this 😂#2020-02-1921:39gerrednevermind#2020-02-1921:44seancorfield@U05509S91 tools.cli is going to get multi-valued option arguments per https://clojure.atlassian.net/browse/TCLI-96 and then it will be released as 1.0.x; core.cache and core.memoize also have 1.0.x releases coming -- Fogus and I are collaborating on those.#2020-02-1921:46seancorfieldjava.jdbc will stay at 0.7.11 because seancorfield/next.jdbc is essentially the 1.0.x release of that (with a different API). java.data got a 1.0.x release yesterday. I think that covers everything I maintain directly in Contrib.#2020-02-1921:46gerredyup makes sense#2020-02-1921:58Alex Miller (Clojure team)any contrib lib not yet 1.0 is either lightly used and non-critical or the process for getting there is in the hands of project owners and will happen in due time as seen fit#2020-02-1922:00gerredmakes sense. I'm just calling out ones that I actively touch as I touch them, happened to be doing some arg parsing and figured I'd throw in the note. 🙂#2020-02-1922:02Alex Miller (Clojure team)in addition to the ones just mentioned, tools.logging and data.xml are others that could potentially be updated. the latter in particular has been in perma-alpha for a long time#2020-02-1922:03Alex Miller (Clojure team)tools.deps.alpha is definitely headed there, but has more decisions about being non-alpha named#2020-02-1922:03gerredyeah for sure#2020-02-1922:05Alex Miller (Clojure team)other than those, I'm not planning on actively doing any more, but other owners of less frequently active libs may get to them at some point (like math.combinatorics or something)#2020-02-1922:07gerredfor those there may not even be a reason (arguably) to kick out another version unless there's an actual change in the package itself#2020-02-1922:07gerred¯\(ツ)/¯#2020-02-1922:07Alex Miller (Clojure team)correct#2020-02-1906:51seancorfieldorg.clojure/java.data {:mvn/version "1.0.64"} -- https://github.com/clojure/java.data -- functions for working with Java Beans and "builders" as Clojure data -- is now following the MAJOR.MINOR.COMMITS versioning scheme per other Contribs listed above. Follow-up in #clojure#2020-02-1911:32thumbnailformatting-stack is a formatting+linting solution that wraps some of the most popular libraries in the space (cljfmt, refactor-nrepl, eastwood, clj-kondo and more), making them more accurate, efficient and repl-friendly, avoiding cold-starts.
We’ve been using this internally for the past year to unify all config / tooling among our devs.
It’s typically integrated with tools.namespace and Git, but we also place a lot of emphasis on agnosticism: you can configure and run our ‘glue’ however you please.
With a bit of luck it could become community-driven project, gradually. In the end want this to be a solution as helpful as possible - PRs welcome!
https://github.com/nedap/formatting-stack#2020-02-1921:21Bobbi TowersThis one thing condenses like 8000 hours of reading 6 yr old blog posts 😜#2020-02-1921:44dotemacsWow, this is pretty cool, thanks for this!#2020-02-2018:49thumbnail@U8LB00QMD most of the team had no prior experience and the integrated formatting with linting to get everything straight has proven really helpful :)#2020-02-1922:19oliyI'm pleased to announce superlifter, a DataLoader for Clojure. Feedback welcome! https://github.com/oliyh/superlifter#2020-02-1922:33lilactownthis has been sorely needed for awhile! nice job!#2020-02-1922:34lilactownalso TIL about funcool/urania#2020-02-2007:13oliyThanks, urania does the clever bit!#2020-02-1923:51borkdudebb v0.0.71: implemented clojure.repl/doc, added clojure.pprint/pprint and some other stuff - follow up in #babashka
https://github.com/borkdude/babashka/releases/tag/v0.0.71#2020-02-2000:37andy.fingerhuthttp://ClojureDocs.org has been updated from Clojure 1.9.0 to Clojure 1.10.1 today. Thanks to site creator and maintainer Zachary Kim and I believe also Ilya Bernshteyn for helping with the update.#2020-02-2012:35mauricio.szaboJust published Chlorine version 0.4.7, socket REPL package for Atom. It adds autocomplete for bb v0.0.71 🙂.
In this version, it Chlorine is also trying to get rid of an old dependency called Ink that, on my profiles, showed that can slow down older computers. It's behind a configuration (enable experimental features) because it can be unstable...#2020-02-2012:42borkdude❤️#2020-02-2013:10littleliI think it's time for me to try this whole setup on Windows...#2020-02-2016:56seancorfieldorg.clojure/tools.cli {:mvn/version "1.0.194"} -- https://github.com/clojure/tools.cli -- tools for working with command line arguments -- is now following the MAJOR.MINOR.COMMITS versioning scheme per other Contribs listed above. Follow-up in #clojure#2020-02-2419:54aviFYI the releases page is still showing an older release as the latest:#2020-02-2419:59seancorfieldIt says "Show 2 newer tags"#2020-02-2419:59aviYes, I saw that#2020-02-2419:59aviI’m super familiar with the releases feature of GitHub… I just shared this because this situation can sometimes trip up people who are not familiar with it#2020-02-2420:00aviIf someone’s in a rush they could easily miss that link#2020-02-2420:00seancorfieldContrib projects have tags created via the Maven release process. I guess I accidentally created a GitHub release for 0.4.1 for some reason...#2020-02-2420:01aviYour call if you want to do something about this, but I’d suggest that it could be a little confusing to sometimes create a “release” entity for a release and sometimes not do so.#2020-02-2420:01aviIt’d be perfectly reasonable to delete that release entity#2020-02-2420:01seancorfieldDeleted the GH release 🙂#2020-02-2420:01avi:thumbsup:#2020-02-2420:03seancorfieldNo idea why I created a GH release for 0.4.1. Must have been having a bad day 👀#2020-02-2420:03avi🍭#2020-02-2017:19bartukahttps://github.com/wandersoncferreira/mamulengo --- small project that might be ready for some users! Lightweight database based on datascript with durable store and time travel for Clojure(Script). Not everything must be highly scalable and distributed! Sometimes I just need SQLite and now I can have it with datalog all over the place 😃#2020-02-2017:30borkdudeHow does it compare to datahike (#datahike)?#2020-02-2017:33dominicmI think the main point is that it doesn't scale and distribute. It only runs on one machine I guess.#2020-02-2017:34borkdudeI think datahike supports just writing to a directory/files on disk, without needing a database (postgres/h2). Since this lib also supports CLJS > localstorage, that doesn't seem like a big leap?#2020-02-2017:34borkdudebtw, interesting project, thanks for sharing bartuka#2020-02-2017:35dominicmDidn't know that 🙂#2020-02-2017:35borkdudeIt's the closest datomic thing to sqlite that I know of#2020-02-2017:35bartuka@U04V15CAJ cool, if I had found this last month probably I wouldn't write this from scratch! haha I will take a look at datahike when have sometime available!#2020-02-2017:36refsetI think a big difference is that datahike persists all indexes, whereas this rebuilds the other indexes from datoms each time it starts up: https://github.com/wandersoncferreira/mamulengo/blob/master/src/mamulengo/internals.cljc#L38#2020-02-2021:46zane> if I had found this last month probably I wouldn’t write this from scratch!
I wonder if it might be helpful to have a dedicated channel for “Has anyone already solved this problem?” or “Does this library already exist?” kinds of questions. :thinking_face:#2020-02-2021:47borkdude#find-my-lib#2020-02-2021:48zanePerfect!#2020-02-2022:00bartukahahah! I have to be honest, my search was very poor and I learned so much in the process of making it! hehe But in fact, this channel is necessary!!!#2020-02-2022:26Alex Miller (Clojure team)Clojure 2020 survey results! https://clojure.org/news/2020/02/20/state-of-clojure-2020#2020-02-2022:44Andy WoottonAlternative interpretation of graphs: a lot of tinkering was converted to real work and companies that use Clojure grew fast.#2020-02-2022:55seancorfield@U064X3EF3 Looks like the org size is reported twice instead of # people using Clojure?#2020-02-2023:03Alex Miller (Clojure team)shoot, thx#2020-02-2023:03Alex Miller (Clojure team)too many images#2020-02-2023:11Alex Miller (Clojure team)fixed#2020-02-2102:43sogaiusome of the images have text labels that end in "..." -- that makes it a bit difficult to know what is being referred to exactly. is there something i'm missing that might help me to see the labels more fully?#2020-02-2102:50Alex Miller (Clojure team)if you go to the full results (linked at top and bottom), you can dive into or download all the data in detail#2020-02-2102:51Alex Miller (Clojure team)https://www.surveymonkey.com/results/SM-CDBF7CYT7/#2020-02-2102:51sogaiuthanks!#2020-02-2107:06pezClojure really is a work tool. This is Calva users over the last two months. Roughly half the numbers during weekends, and see what happened during x-mas. (If you think you see a general increasing trend, I agree with you. I think Clojure is growing as we speak. Homebrew install stats indicates the same.)#2020-02-2023:04Alex Miller (Clojure team)and some of my own feedback on the open text results: https://insideclojure.org/2020/02/20/clojure-survey/#2020-02-2115:16Alex Miller (Clojure team)there was a change (https://github.com/Homebrew/homebrew-core/commit/715900bfab494ccee4cadeea902d80ccce6e7a16) made in the homebrew clojure formula to install the latest adoptopenjdk, rather than just checking for an existing Java 8+. This was made by someone outside the Clojure community that just goes around changing things to use adoptopenjdk. This change is wrong, imo. I have filed an issue at https://github.com/Homebrew/homebrew-core/issues/50536 - if you have had surprising experiences, a comment on the issue would be helpful.#2020-02-2115:22Alex Miller (Clojure team)...and they just closed the issue#2020-02-2115:23hindolDo you think it makes sense for the Clojure community to take over the package in a tap?#2020-02-2115:24Michael J DorianThat seems... remarkably hostile of them.#2020-02-2115:31Alex Miller (Clojure team)well I have been contemplating making our own tap for a while. this may have just tipped the scale.#2020-02-2115:32Alex Miller (Clojure team)it is really a pain though to have both#2020-02-2116:01lilactownYeah ideally we would pull it from th main repo#2020-02-2116:28gerredheh the homebrew version of maven also has this as a dependency now, oddly that's what bit me#2020-02-2116:58vemv> that just goes around changing things to use adoptopenjdk.
There's the more charitable interpretation that the Homebrew maintainers want to keep/enforce a consistent implementation and policy.
Two members of the Homebrew team suggest JAVA_HOME, which doesn't sound too bad. Most importantly, that technical alternative doesn't appear addressed in the 2 threads
tbh setting up JAVA_HOME sounds like bit of a pita - one would always want a smooth automagical installation instead, particulaly for beginners.
But it's reasonable to see why that not may be attainable in a huge project that specifically has the policy of disregarding LTS versions: https://github.com/Homebrew/homebrew-core/commit/715900bfab494ccee4cadeea902d80ccce6e7a16#r37415334#2020-02-2118:17andy.fingerhutTo test, I just updated clojure on my Mac using brew, and it did install openjdk13 via Brew, which had not been installed on my system before. I have several 2-line bash scripts on my system that simply set the JAVA_HOME env variable to a different JDK install on my system, and also add the binary directory to my PATH, then ran clojure , and it used the one in JAVA_HOME, not openjdk13. So it is working as they advertise.#2020-02-2118:19andy.fingerhutWhether or not someone wants http://clojure.org install instructions to mention things like this when installing view Homebrew, I do not know.#2020-02-2221:49Space-OtterNoobie CS-Student here. Roast me if I am wrong but shouldn’t a package manger provide you the recommended way to install software? The argument “You need Java to use Clojure, we install that dependency.” by SMillerDev sounds a bit off to me. Maybe they don’t see the impact of such decision. To treat Clojure and its dependencies like every other piece of software … seems to be a very “naive” thought. The most programs aren’t also environments like Clojure.#2020-02-2222:40andy.fingerhutThe same argument could be made for other developer tools/environments that require Java, like Maven, and they did it for Maven, too. Rule one of open source: every open source project has decision makers, and they make the decisions. Others might not like them, but the project decision makers are entirely within their rights to make them. In response, others can complain, argue, provide evidence, open issues, etc. In the end, the decision makers of a project decide.#2020-02-2222:40andy.fingerhutAnyone can also choose to create their own fork of the open source project, under the appropriate license, and do the work themselves. For some things, that is worth the effort. For most, it often is not -- it just takes too much time to maintain a fork in many cases.#2020-02-2300:19Space-OtterI totally agree with you. I just thought the hole thing about brew formulas was to be transparent and as flexible as possible. So that the maintainer/decision maker of a formula has the right set of tools to communicate and deploy his software.#2020-02-2301:04andy.fingerhutAnd the decision makers get to decide what high level statements like "the maintainer/decision maker of a formula has the right set of tools to communicate and deploy his software." means, if that is even what the Homebrew project claims to provide.#2020-02-2409:26StefanI also ran into this with maven this weekend. I was already using asdf-vm (https://asdf-vm.com/) for managing nodejs, java, python, etc, so I just installed maven through asdf instead of brew. I guess I’ll also install Clojure using asdf in the future.#2020-02-2717:24adamfeldman@U064X3EF3 I’m working on updating the Clojure plugin for the asdf version manager. Where do I go to find the enumerated list of all point releases of Clojure e.g. 1.10.1.469 vs. 1.10.1.510 vs 1.10.1.510_1? This URL doesn’t have the point releases: https://repo1.maven.org/maven2/org/clojure/clojure/1.10.1/ (found via https://clojure.org/community/downloads)
@UGNFXV1FA I’m also a very happy asdf user. The “blessed” Clojure plugin for asdf https://github.com/halcyon/asdf-clojure hasn’t been kept up-to-date with minor releases. I have a forked copy of the versions file @ https://github.com/adamfeldman/asdf-clojure/blob/master/bin/versions#2020-02-2717:26Alex Miller (Clojure team)The full version only applies to the Clojure tools, which is not on maven anywhere#2020-02-2717:29Alex Miller (Clojure team)The https://github.com/clojure/brew-install/blob/1.10.1/CHANGELOG.md is a human source of that info or git tags on that repo#2020-02-2717:30Alex Miller (Clojure team)And soon https://github.com/clojure/homebrew-tools will be an alternate source of info#2020-02-2717:30Alex Miller (Clojure team)Working on that now#2020-02-2717:50adamfeldmanThat’s awesome, looking forward to adopting your new Homebrew tap.
I don’t feel a strong need to use asdf to manage my Clojure versions, because I don’t often find myself switching between Clojure versions (typically just update my system to the latest).#2020-02-2116:57hkuptyFor those interested in protobuf/clj interfacing, just pushed the first alpha version:
https://github.com/hkupty/defteron#2020-02-2117:01dominicmIs this runtime?!#2020-02-2117:17hkuptyYes.#2020-02-2117:19hkuptyI was thinking on a macro-based alternative for known classes, but it's not the focus for my usecase...#2020-02-2117:24gklijsConfluent is busy adding support for protobuf to schema registry (it's in current master) so might be interesting for #apache-kafka #jackdaw#2020-02-2117:24dominicmThis is incredible. The need to precompile protobuf has always been a problem for me.#2020-02-2117:25dominicmI assume it can work on the binary form?#2020-02-2117:33hkuptyHum, maybe we're talking about different things. This is runtime reflection on top of protobuf java objects. Is this still what you're looking for?#2020-02-2117:34dominicmOh. I thought it was protobuf serialization.#2020-02-2117:34dominicmAnd deserialization.#2020-07-2818:39seancorfieldGiven that -X:some-alias is very explicitly invoking a Clojure function (and not -main), I would much rather have the arguments pre-`read` rather than having to deal with strings from the command-line but native Clojure data from the :args defaults -- and I'll happily pay the '"string"' tax for that convenience.#2020-07-2818:47Alex Miller (Clojure team)everything already comes in as a string, the question is whether you pre/post process around edn/read-string#2020-07-2818:56seancorfieldI meant "inside the called function", in case that wasn't clear.#2020-07-2818:31blueberryNeanderthal 0.34.0 released!
The Chttps://twitter.com/hashtag/Clojure?src=hashtag_click matrix library! https://twitter.com/hashtag/Maths?src=hashtag_click https://twitter.com/hashtag/HPC?src=hashtag_click CUDA GPU CPU
https://neanderthal.uncomplicate.org#2020-07-2819:28Alex Miller (Clojure team)A new dev version of clj 1.10.1.596 is now available thanks to the keen eyed clj bug hawks in #tools-deps - if you like some more long form words, I have written some here: https://insideclojure.org/2020/07/28/clj-exec/#2020-07-2909:22mihaelkonjevicAnnouncing keechma/pipelines - Manager for async and concurrent code in ClojureScript. https://github.com/keechma/keechma-pipelines#2020-07-2911:24bruno.bonacciHi,
here the recording of Justin Conklin presentation
Microbenchmarks with jmh-clojure at the https://www.meetup.com/London-Clojurians/events/271860420/ meetup.
https://youtu.be/_6qVfFkBdWI#2020-07-2911:28borkdudeThanks for the fast publishing!#2020-07-2914:24tiensonqinHi,
just want to share http://logseq.com which is a local-first non-linear outliner for organizing your knowledge base, it draws a lot idea from Roam Research, Org mode, and Tiddlywiki,
It works directly with both plain Markdown or Emacs Org Mode. The server will never store the user's private notes, so the data are stored locally in the browser IndexedDB and can be synced using a local Git web client.
It has hiccup support and sci (thanks to @borkdude) support directly.
ah my bad, forget to say that logseq is also using Datascript and Rum by @tonsky and reitit by @ikitommi and shadow-cljs by @thheller!
Thank you very much!
The code will be open source in the next coming months (no more than three months), it'll need a lot of help, send me a dm if you're interested!#2020-07-2915:06eggsyntaxVery cool! How complete is the org mode emulation?#2020-07-2915:07tiensonqinI'd say it's mostly done
The code for parsing is open sourced:
https://github.com/mldoc/mldoc#2020-07-2915:14tiensonqinlmk if something breaks!#2020-07-2915:40tiensonqin@U077BEWNQ btw the app doesn't support org mode if not logged in, will fix this soon.#2020-07-2915:57JohannaCrux 1.10.0 is out 🚀
Highlights are:
* SQL query support https://github.com/juxt/crux/tree/20.07-1.10.0/crux-sql
* Speculative transactions - 'what if this transaction were applied?' https://github.com/juxt/crux/tree/20.07-1.10.0/docs/speculative.adoc
* More types of entity IDs - particularly, strings and longs.
* EQL Projections (aka 'pull syntax') https://github.com/juxt/crux/tree/20.07-1.10.0/docs/projections.adoc
Check out the full release notes here: https://github.com/juxt/crux/releases/tag/20.07-1.10.0#2020-07-2916:38practicalli-johnhttps://github.com/practicalli/clojure-deps-edn is a user level configuration for Clojure CLI and deps.edn based projects. The aim is to provide a set of tools and useful aliases to help with the full development workflow. Alias names are meaningful and descriptive to avoid being over-ridden by project specific aliases, so they are more readily available.
Library versions updates are checked regularly using the :outdated alias which calls depot on the configuration to check and update library versions directly.
Any experimental or alpha state tools are marked as experimental - use at your own risk.
Recent alias additions include
• :dev - include the /dev/ path to configure REPL startup with a /dev/user.clj` file - https://practicalli.github.io/clojure/clojure-tools/configure-repl-startup.html
• rebel-nrepl - run rebel REPL with nrepl connection for editor connections (eg. CIDER, Calva)
• :nrebl - REBL data browser on nREPL connection (e.g. CIDER, Calva)
• :deploy-locally to add a jar to _/.m2 directory
• :deploy-clojars to deploy a jar on http://clojars.org
• :deploy-clojars-signed to sign and deploy a jar on http://clojars.org
• Updated libraries to use their fully qualified names#2020-07-3114:43mihaelkonjevicAnnouncing keechma/entitydb, second iteration of EntityDB - a client side database and normalization engine for ClojureScript https://github.com/keechma/keechma-entitydb#2020-07-3120:57Alex Miller (Clojure team)A new clj release candidate (what we were formerly calling "dev" releases) is now available - 1.10.1.619 (see https://github.com/clojure/homebrew-tools#version-archive-tool-releases for installation info)
• Fixes -Spom regression in overwriting groupId in existing pom.xml files
• Improvements in error handling for -X
• New: -F execution specifier to invoke an arbitrary function that takes a map at the command line: clj -Fclojure.core/pr :a 1 :b 2 => {:a 1 :b 2}#2020-08-0215:02vlaaadI wanted to connect to another process from my repl, so I made a small remote repl: https://github.com/vlaaad/remote-repl. There is a very similar project — https://github.com/mfikes/tubular, but I decided to write my own because I wanted such a simple tool to be more lightweight.#2020-08-0316:31Nassinis it so hard to describe that it's just a socket repl client? 😂#2020-08-0317:12vlaaadIsn't it in the name? :thinking_face:#2020-08-0220:14Candidjoker v0.15.6 is out https://github.com/candid82/joker/releases/tag/v0.15.6#2020-08-0220:33lvhCloverage 1.1.3 is released with a whole bunch of improvements! https://github.com/cloverage/cloverage/blob/master/CHANGELOG.md#113#2020-08-0300:30djblueJust released 0.2.0 of portal, a data browser similar to REBL https://github.com/djblue/portal/releases/tag/0.2.0. https://djblue.github.io/portal/ for a live demo.#2020-08-0301:21seancorfield@U1G869VNV I just went to try this and discovered it doesn't work on Windows with Powershell (and then I looked at the source and it was obvious why). Maybe make that clear in the README to save other Windows folks some time?#2020-08-0301:21seancorfieldThis was the error, by the way:
Execution error (IllegalArgumentException) at clojure.java.shell/parse-args (shell.clj:47).
No value supplied for key: --app=
user=>
#2020-08-0301:22djblueI can add windows support, should be pretty easy. Sorry about that.#2020-08-0301:24seancorfieldFWIW, I get the exact same error on WSL on Windows. I thought that maybe starting it from Ubuntu would work since it tries to shell out to Chrome...?#2020-08-0301:26seancorfield(it looks very cool tho' -- so nice to see several open source REBL alternatives appearing -- it validates the approach is worth adopting more widely)#2020-08-0301:30seancorfieldHappy to help debug it on Windows if you want...#2020-08-0301:35djbluehttps://github.com/djblue/portal/commit/8e3b17d534eb064386a67d2ba93d6ec779d8dc1a should fix it and can be pulled via git deps#2020-08-0301:48seancorfieldWhy try to use Chrome at all? Why not just use (clojure.java.browse/browse-url "")#2020-08-0301:48seancorfieldThat should open the default browser on every platform.#2020-08-0301:53djblueI didn't know about that. I wanted to use the --app mode for chrome.#2020-08-0301:57seancorfieldNot every has Chrome installed 🙂#2020-08-0301:58Ryan ZwiefelhoferCould you fall back to browse-url if it can't find chrome?#2020-08-0301:58djbluehttps://github.com/djblue/portal/commit/7919617f799a5be8c9ce72741c98b8b6ceaaa74e#2020-08-0301:58djblueI think that would probably be best#2020-08-0301:58seancorfieldWhy use Chrome's app mode? What benefits does that have over just opening to the URL in the default browser?#2020-08-0302:00seancorfieldCool. That works on Powershell. Thanks.#2020-08-0302:00djblueIt enables me to eliminates the extra ui provided by chrome which isn't needed. It's mostly an aesthetic thing.#2020-08-0302:02seancorfieldAh, OK.#2020-08-0302:03seancorfieldSo I use Component and I tapped (alter-var-root #'system component/start) and it seems to have crashed portal.#2020-08-0302:03seancorfieldThat would tap> a record instance#2020-08-0302:04seancorfieldAfter that, portal no longer responds to tap> with any values.#2020-08-0302:05seancorfieldBackground: I have Atom/Chlorine set up to tap> every REPL evaluation -- it's how I use Reveal and I figured it would work with Portal as well... which it does for some simple values...#2020-08-0302:05djblueIt's probably related to my usage of transit#2020-08-0302:05djblueAny errors?#2020-08-0302:07seancorfieldNo. Just seems to lock up.#2020-08-0302:07seancorfield(in that it never displays any more values)#2020-08-0302:08djblueIf you clear, does it get back to a usable state?#2020-08-0302:11seancorfieldNo. I ran (port/clear) (tap> :test) and :test did not appear.#2020-08-0302:13seancorfieldIf I do (port/close) (port/open) the most recent tapped value shows up.#2020-08-0302:14djblueDid you tap> any infinite seqs?#2020-08-0302:14djblueThat would definitely break portal currently 😅#2020-08-0302:15seancorfieldIt definitely seems to be when I tap> a Var that contains a Component (a large one but no loops in it).#2020-08-0302:16seancorfieldYou should be able to repro it easily in this example app https://github.com/seancorfield/usermanager-example#2020-08-0302:16djblueI'll take a look, thanks for the example app!#2020-08-0302:16seancorfieldThere's a comment in the main.clj that defines the system component and then starts it.#2020-08-0302:17seancorfieldOnce you have system started, try to (tap> system) and see what happens...#2020-08-0302:20djblueError: No protocol method IWithMeta.-with-meta defined for type object: [TaggedValue: portal.transit/object, {:id #uuid "fa4bad2c-51fe-445b-97dd-31fce7326317", :type "clojure.core$promise$reify__8501", :string "#object[clojure.core$promise$reify__8501 0x2ce8cf77 {:status :pending, :val nil}]"}]#2020-08-0302:20djblueIt was related to transit#2020-08-0302:21djblueIt's because tagged values, which is what i turn everything that isn't normal clojure data into, doesn't support metadata.#2020-08-0302:21djblueI'll see if I can fix it 👌#2020-08-0304:28djbluehttps://github.com/djblue/portal/releases/tag/0.2.1 should fix it#2020-08-0304:31djblueThanks again for trying out portal and finding these issues!#2020-08-0304:34seancorfieldTrying the latest version...#2020-08-0304:39seancorfieldI did git pull and tried it again, and it still doesn't work -- exactly the same as before.#2020-08-0304:41djblueAre you still using it via git deps or the release version?#2020-08-0304:42seancorfieldAh, 0.2.1 isn't on the windows branch. My bad.#2020-08-0304:42djblueSorry about that#2020-08-0304:42seancorfieldYup. 0.2.1 works perfectly.#2020-08-0304:42seancorfieldNice!#2020-08-0304:43djblueI'm going to delete the windows branch now then. Let me know if run into any other issues. Also, the ux is still WIP and I am very open to ideas.#2020-08-0304:44seancorfieldAre there keyboard shortcuts for navigating back and forth?#2020-08-0304:45djblueNot yet, on my todo list though#2020-08-0304:45djbluelet me know if you have any preferences#2020-08-0304:48seancorfieldI'll update my atom-chlorine-setup repo tomorrow with details about Portal so folks can choose Portal, or Reveal, or REBL.#2020-08-0308:36henrikThis looks really cool, thanks!
As an additional data point, I have Chrome installed, but I don’t like to use it unless I absolutely have to. I use https://www.fluidapp.com/ to get rid of unnecessary UI in frequently used webapps.#2020-08-0310:10kwrooijenVery cool! I'm wondering if there are any plans to be able to edit fields and run callbacks on submit? I need something like this, but where I can edit the data as well. If this is to be purely for inspecting then I might fork this for my own usecase#2020-08-0314:13djblue@U06B8J0AJ, I think I'll update open to take some options. Currently I'm planning to add support for selecting a theme, but it could also take a disable chrome app flag or if people prefer to opt in instead, that could also work.#2020-08-0314:16djblue@UG9U7TPDZ editing is something I want as well, not sure how the ux would work. I was thinking of making atoms explicitly editable, I haven't thought too much about extensibility though.#2020-08-0314:17djblueIf you guys want to chat more, I would suggest joining the #portal channel#2020-08-0315:01Luke JohnsonThis is awesome! It perfect fits my use case. Thanks for showcasing it! 😉#2020-08-0310:02slipsetArdoq is happy to release verson 0.1.0 of azure-api which allows for simple usage of the Azure REST APIs in Clojure.
https://github.com/ardoq/azure-api#2020-08-0314:54bozhidarCIDER 0.26 (Nesebar) and nREPL 0.8 are out! More details - https://github.com/clojure-emacs/cider/releases/tag/v0.26.0 and https://metaredux.com/posts/2020/06/15/nrepl-0-8-evolving-the-protocol.html Special thanks to Clojurists Together for their support and to all the contributors for their help! Cheers! cider#2020-08-0411:20bruno.bonacciHi all,
I’ve just release μ/log v0.4.0 https://github.com/BrunoBonacci/mulog
This version contains:
- A new publisher for AWS CloudWatch Logs
- A new publisher for [Jaeger Tracing](https://www.jaegertracing.io/)
- Performances improvements for μ/trace and local-context
- Various fixes and improvements
- More documentation#2020-08-0411:26bruno.bonacciHi all,
I’ve just release safely v0.7.0-alpha1 https://github.com/BrunoBonacci/safely
Safely is a Clojure’s circuit-breaker library for handling retries in an elegant declarative way.
This version contains the tracking migration to μ/log.
So now all the safely s-expr are automatically traced and you can get a visual representation
of your traces via Zipkin (http://zipkin.io) and Jaeger Tracing (https://www.jaegertracing.io/)
Here and example:#2020-08-0422:55Coryi have been evaluating diehard but this has a lot of strong selling points for me!#2020-08-0510:38Jakub Holý (HolyJak)Nice! Here:
;; or wait a random amount of time with +/- a random variation
:retry-delay [:random 3000 :+/- 0.35]
Q1: Is the +/- a fraction of the base, i.e. +/- 300 * 0.35? And is it really "random amount of time with +/-" or rather "given amount of time with +/- random variation"? Update: Reading more of the Readme I see this is indeed the case
Typo here:
;; if the output of the body should be considered as a filed response
Q2: And what is "thread pool queue size"? How many calls can wait for a thread to become available? What happens to those that do not fit in? Update: I see it is later explained to be indeed the case.
Typo: time an incrising number
Q3: What does :failure-threshold 0.5 mean? That 50% of requests in some time window failed??
"Hystrix over the years became unnecessarily a huge library." - and it is also deprecated in favour of resilience4j or adaptive limits.#2020-08-0511:42bruno.bonacciHi @U0522TWDA,
thanks for the typos, i’ll fix it.
A1: it produces a random jitter with uniform distribution around the base with a +/- a given pct. you can see it as roughly 3s (across many calls)
A2: Queue size and thread-pool size are configurable, requests are rejected of no space/thread is available. Depending on the configuration the request might be retried in a later time
A3: :failure-threshold checks how many requests failed within the last x seconds (controlled by :counters-buckets) and if the threshold is crossed it flips the circuit open.#2020-08-0414:29lvhUnfortunately one of the improvements in Cloverage 1.1.3 introduced a regression 😬 Fortunately the author of the feature with the unintended side effect was able to quickly produce an alternative that appears to work fine, and now we have a regression test for that edge case 🙂
I have cut a new release, 1.2.0 -- everyone should update. lein-cloverage will inject RELEASE automatically if you don't specify a version explicitly in your dependencies or via the CLOVERAGE_VERSION environment variable, so hopefully this will fix a bunch of projects that never even noticed anything was wrong :)#2020-08-0501:50ericdallohttps://github.com/snoe/clojure-lsp/releases/tag/release-20200805T014150 of cloure-lsp supporting CodeLens ! 🎉 More info on #lsp
Here is a emacs example showing references code lens#2020-08-0504:05rymndhngHi folks!
A new version of https://github.com/dakrone/clj-http is out: 3.10.2 🎉
The release contains a few bug fixes and minor enhancements (most notably: support for GraalVM).
For more information, see https://github.com/dakrone/clj-http/blob/facddf1ca2d86ccc0d943f5787cce19aca3b1035/changelog.org#3102.#2020-08-0509:38viestiHi! I did some random walk summertime hacking and made a Cypress ClojureScript preprocessor using shadow-cljs, so you can write Cypress test files in ClojureScript: https://github.com/viesti/cypress-clojurescript-preprocessor. Probably very rough on the edges, but if you like, give it a try and file issues for improvement 🙂#2020-08-0607:19tony.kayI’d like to announce two new videos covering Fulcro RAD.
Fulcro RAD is still listed as alpha, but it is being used in my own production projects. I decided to make a couple of videos to give people an idea of what it is capable of, and where you can go with it.
Fulcro RAD (rapid application development) is an add-on library for Fulcro (which allows you to build data-driven single-page webapps). It is a purely opt-in add-on with a philosophy of “choose what you want, escape at any time”. It provides scaffolding and support for boilerplate-free schema, network API, database interfacing, forms, reports, and dashboards.
I’m short on time, so the videos are not as well-planned as I’d like (there’s a little overlap), but they do cover the core details, and are hopefully clear enough.
If your interested I’d recommend starting with: https://youtu.be/P2up8qcDmJs which is a bit more hands-on with what it looks like to work with RAD, and then if you’re interested in how it is all glued together continue on to this one: https://youtu.be/H2XY5kdcjGU
I just uploaded them, so if they are still processing try again a bit later.
There is also an early edition of a book at http://book.fulcrologic.com/RAD.html#2020-08-0618:23Ivanthanks for you work! there's ton of documentation on this project, the concepts and ideas that led to the design. Thanks for putting so much time into this. Cheers!#2020-08-0618:08tony.kayI’ve released RC versions of the Fulcro RAD core library and Datomic plugin. These two main libraries are the most heavily used in production, and have been pretty stable. The other plugins (web rendering, SQL db) are still in alpha.
https://github.com/fulcrologic/fulcro-rad
https://github.com/fulcrologic/fulcro-rad-datomic
See the https://github.com/fulcrologic/fulcro-rad-demo or the YouTube videos (above) as well.#2020-08-0619:50blueberryNeanderthal now supports zero-install MKL out of the box! Check out new release 0.35.0 https://neanderthal.uncomplicate.org#2020-08-0705:08Vincent CantinToday I released the Diffuse library.
https://github.com/green-coder/diffuse#2020-08-0712:11Jakub Holý (HolyJak)I love https://github.com/green-coder/diffuse#use-cases 🙂#2020-08-0712:44Vincent CantinI will fill it up after I am done experimenting the thing for which I built it.#2020-08-0712:40Adam HelinsA small but useful CLJS library for scheduling various type of async operations hits 1.1.0 https://github.com/dvlopt/timer.cljs
Notably, it circumvents problems often encountered, for instance when using vanilla .setInterval#2020-08-0714:35Joe LaneI’ve been enjoying your other libs too. Nice work!#2020-08-0715:40Adam Helins@U0CJ19XAM It's good to hear that, thanks!#2020-08-0720:29Alex Miller (Clojure team)A new prerelease version of the Clojure tools (`clj`) is now https://github.com/clojure/homebrew-tools#version-archive-tool-releases: 1.10.1.636
• Fixes for Windows scripts with clj -X (thanks @vlaaad!)
• Fix for ssh compression on git lib deps (https://clojure.atlassian.net/projects/TDEPS/issues/TDEPS-160) - thanks to @donavan for the report
• Fix for the possibility of including child deps of unused versions of libs in classpath (https://clojure.atlassian.net/projects/TDEPS/issues/TDEPS-159)#2020-08-0720:51vlaaadNot sure if there is a jira issue for that, but having no :args makes clj-exec fail:
PS C:\Users\Vlaaad\Projects\tdeps> cat .\deps.edn
{:aliases {:prn {:fn clojure.core/prn}}}
PS C:\Users\Vlaaad\Projects\tdeps> clj -X:prn :a 1 :b 2
Invalid :args for exec, must be map or alias keyword: nil#2020-08-0721:43Alex Miller (Clojure team)Oh yeah, that was reported and I forgot to fix it#2020-08-0721:44Alex Miller (Clojure team)Will do#2020-08-0813:59robert-stuttafordSimple little reference app which shows you how to bring together cider, clj-refactor, shadow-cljs into a working clj+cljs repl in Emacs.
Extracted from our battle-tested production app:
https://github.com/robert-stuttaford/clj-cljs-app/#2020-08-0918:25Vincent CantinNew release of Minimallist - v0.0.6
Added a describe function that parses data (similar to Clojure Spec’s s/conform function)
https://github.com/green-coder/minimallist#2020-08-0919:07mike_ananevNew release of Context library - v0.1.2. Added two helpers functions. h/state-value function is now aware of clojure.lang.IDeref, so it is possible to use async value (future, promise) returned from start-fn. This may be helpful when you want to perform asynchronous connection to database and use it in another component.
https://github.com/redstarssystems/context#2020-08-0919:16Shantanu KumarNew release of application configuration library Keypin v0.8.1 with bugfix and usability improvements: https://github.com/kumarshantanu/keypin#2020-08-0920:44miroHi folks! New release of Titanoboa (0.8.4) is out! Feel free to check it out, there are some bug fixes and also new UI for dependency management.
https://github.com/mikub/titanoboa#2020-08-1007:18javahippieWe just published version 0.2.0 of our Testcontainers wrapper, clj-test-containers. It now covers more functionality of the original API and has improved changelogs and documentation. If you are getting tangled in infrastructure setup for integration tests, this could be helpful. https://github.com/javahippie/clj-test-containers#2020-08-1207:46katoxHi everyone,
The release 0.3.0 of PGMig is out.
PGMig is a standalone PostgreSQL Migration Runner using Migratus. It's
just like Migratus but it is compiled into a native binary. It can be used to
execute sql migrations while developing without a lein plugin but it is
also useful a as blazing fast init container for apps that are deployed
to Kubernetes.
What's new:
- The latest and greatest Migratus
- GraalVM updated to 20.1.0
- The docker build now uses the official graalvm-ce as a base image
- Pre-built x86_64 linux docker image is available at [dockerhub](https://hub.docker.com/r/leafclick/pgmig)
Gihub: https://github.com/leafclick/pgmig
Enjoy,
Kamil#2020-08-1212:53Toby ClemsonReleased 0.1.14 of cartus, now with a custom clojure.test assertion for checking that log events have occurred. https://github.com/logicblocks/cartus#2020-08-1212:55Toby ClemsonDocumentation for the logged? assertion: https://logicblocks.github.io/cartus/getting-started.html#testing-for-log-events#2020-08-1219:32vlaaad#cljfx 1.7.5 is released! This release might be interesting for cljfx users who use contexts and subscriptions in their projects because it simplifies writing subscriptions — see https://github.com/cljfx/cljfx/blob/master/CHANGELOG.md#175---2020-08-12 for details.#2020-08-1219:35Daniel SlutskyIndeed useful to know.
Thanks @U47G49KHQ @UPBGWFUM7!#2020-08-1521:43rschmuklerJust released the first alpha snapshot of Tapestry - bringing clojure APIs for working with Project Loom: https://github.com/teknql/tapestry#2020-08-1701:29Chris McCormickSlingcode v0.2.0 is released. Updates include image pasting, search & replace, UI fixes, and fixes to two example projects.
https://github.com/chr15m/slingcode/releases/tag/0.2.0
https://slingcode.net/#2020-08-1701:29Chris McCormickhttps://user-images.githubusercontent.com/67130/90349143-41e6f900-e06b-11ea-8197-eb2ce5b7cd80.gif#2020-08-1713:25mauricio.szaboJust published version 0.9.0 of socket-repl package for Atom Chlorine. On this release, better support for "alternative" Clojure implementations like Clojerl, Babashka, Lumo, ClojureCLR and Joker, better support for nREPL, and better testing pipeline to check all these implementations. Discussions on #chlorine 🙂#2020-08-1713:30plexusKaocha 1.0.658 is out! Kaocha is an all encompassing testing tool. This release contains improvements to the the hooks and Orchestra plugins, and new affordances for plugin and test-type implementors, some of it in preparation of kaocha-cljs2. https://github.com/lambdaisland/kaocha/releases/tag/v1.0.658#2020-08-1713:35plexusFollow-up in #kaocha please#2020-08-1713:45plexusThe first release of Funnel-client is out (https://github.com/lambdaisland/funnel-client), containing Clojure and ClojureScript implementations of funnel clients. Funnel is a standalone websocket message hub meant as a basis for interactive developer tools that need to talk to a JS runtime. This library release should make it easier to get started building tools for Funnel. For more background on Funnel see the Funnel README https://github.com/lambdaisland/funnel and Funnel's announcement on ClojureVerse https://clojureverse.org/t/announcing-the-first-release-of-funnel/6023#2020-08-1713:45plexusFollow-up in #lambdaisland#2020-08-1722:16dchelimskyCognitect Labs’ aws-api 0.8.474 is now available. https://groups.google.com/forum/#!topic/clojure/pB9lEKj9wcw#2020-08-1913:51LuA new version's out v2.1.4! Now, Fork has full keyword and namespaced keyword support for input names 🙂 Next step will be to write a bunch of examples on how to use the lib with external react components like date pickers and so on plus simpler examples to help everyone getting started https://github.com/luciodale/fork#2020-08-1914:29ikitommilooks good! any examples on using nested data? (maps or sequences)#2020-08-1914:56LuWill add those examples too 🙂 !#2020-08-1923:13bedersthat's a great change!#2020-08-2021:06Alex Miller (Clojure team)Announcing today the first release of https://cognitect.com/dev-tools/index.html, a set of free tools for Clojure devs, including:
• https://github.com/cognitect-labs/REBL-distro
• https://docs.datomic.com/cloud/dev-local.html#2020-08-2021:32dominicmJust to check, is the license changed, or is it the same as before (free for fun, paid for work)?#2020-08-2021:45Alex Miller (Clojure team)The dev-tools are free (pursuant to the https://cognitect.com/dev-tools/license.txt of course)#2020-08-2106:53vlaaadNote: you can't redistribute these tools.#2020-08-2110:24rickmoynihanWhat does this mean for the patreon subscriptions? Are they automatically cancelled, or do we need to stop them?#2020-08-2110:27rickmoynihanSorry if it’s a stupid question. One of our directors has the account and pays for my subscription, so wondering if I need to tell him to stop it.#2020-08-2110:56practicalli-johnNo more :local/root required for REBL, great to see. Thank you.
I've updated my Clojure deps.edn config repository https://github.com/practicalli/clojure-deps-edn#data-browsing
#practicalli#2020-08-2112:24Alex Miller (Clojure team)@U06HHF230 not a stupid question at all - we reduced the price to $0 to ensure no one would be charged again. There was a message that went to Patreon patrons about this.#2020-08-2112:25rickmoynihanCool, thanks for clarifying#2020-08-2113:29Michaël SalihiThx for this dev-tools !
After installing and configuring REBL in my ~/.clojure/deps.edn , I had this error when starting a REPL :
Error building classpath. Could not find artifact com.cognitect:rebl:jar:0.9.240 in central ()
It seems, the error come from lowercase/uppercase conflict because it works fine when I call the REPL with REBL in uppercase in my config file.
We can also wathcing that the maven repo contains two "rebl" directories.
The lowercase one is created when I launch the REPL and so doesn't contains any JAR/Pom.xml files.
Any clue ?#2020-08-2113:32Michaël SalihiP.S. Maybe it's better that I open an issue on REBL-distro#2020-08-2113:33Alex Miller (Clojure team)thanks, we're already aware and will have a new release out today to fix that#2020-08-2113:33Alex Miller (Clojure team)see #rebl for a workaround in the meantime if you like#2020-08-2113:48Michaël SalihiPerfect, thank you very much!#2020-08-2119:41Alex Miller (Clojure team)@UFBL6R4P3 fyi, new dev-tools with updated REBL that fixes this is now available https://cognitect.com/dev-tools/#2020-08-2120:01Michaël SalihiNice, thx @U064X3EF3!#2020-08-2115:34tony.kayFulcro 3.2.14 is on Clojars. This new release adds some networking helpers and primitives for building offline support:
• Tenacious remote (and the packet of destiny): A wrapper for remotes that attempts to smooth over flaky networks (i.e. mobile)
• Load cache. An add-on that allows you to specify that certain loads should tolerate the complete lack of a network, returning a default or the last-seen value of the response.
• Durable mutations: An add-on that gives a new type of transact that has at least once semantics (even through app crashes, closed tabs, etc.)
A video showing them in action (and some of the complications you’ll face using them) is at https://youtu.be/nrF9S5rxVgc
https://github.com/fulcrologic/fulcro#2020-08-2411:41oliyHi everyone,
I am pleased to announce the release of martian 0.1.13
Martian provides an abstraction allowing you to describe the HTTP endpoints that you call without methods, urls and query parameters leaking into your application code, allowing you to work with pure Clojure data. It builds on the flexible interceptor pattern familiar to users of pedestal and supports APIs described with OpenAPI/Swagger. Describing HTTP calls as data allows you to easily stub remote services, generate responses and add aspects such as logging and metrics.
https://github.com/oliyh/martian
Once again I am really pleased and proud to be supported by my contributors, thank you everyone.
This release adds support for:
• OpenAPI v3 - huge thanks to @czan #90 #51
• Parameter references - thanks to @kpmg-jp-jnorton #87
Enjoy!
Cheers,
Oliy#2020-08-2713:15Vladislavwonderful project. thanks for what you've done#2020-08-2913:49oliyHi @UNJE65T24 thank you for the kind words!#2020-08-2412:49alekczFriends, a new stable version of https://github.com/http-kit/http-kit is out 2.4.0 🎉
Graceful server shutdown. Server state queries. SNI-capable client.
And for compilation to a native-image with GraalVM try 2.5.0-alpha2🙌
Check out the full list changes here: https://github.com/http-kit/http-kit/releases
Thanks, as always, to @ptaoussanis#2020-08-2413:04dominicmA little off-topic, but I'm curious to know if any heap memory measurements have been done of httpkit?#2020-08-2414:02alekczI don't think so. I've never done any, and have never read of any either.#2020-08-2414:15alekczFrom what I've read in the docs and code comments, the sense I get is that it's really light on resources.#2020-08-2414:38dominicmIn theory it should be, yeah. Maybe I'll measure. I've been curious about low memory clojure applications :)#2020-08-2922:32dominicmI did some measuring. Http kit can run in 10 m of heap, and easily handles 22k req/s in an i7-3520M.
This is two orders of magnitude above jetty which achieved 700req/s#2020-08-3005:29alekcz@U09LZR36F Thanks! that's awesome. What did you use to generate requests?#2020-08-3007:11dominicmI used wrk.#2020-08-2414:15miroHi everybody! https://github.com/mikub/titanoboa 0.9.0 is out! 🎉💥The GUI is now free also for commercial purposes. 💥 🎉 Yay!
I am also contributing Rabbit MQ support (for workflow job transactions / job channel) to the OSS community version.
https://github.com/mikub/titanoboa/releases#2020-08-2416:50wotbrewHi all, I am pleased to announce the first release of idx https://github.com/wotbrew/idx 🎉 0.1.0, which provides clojure(script) data structures with secondary index support. It lets you treat your existing collections like little databases.
Feel free to ping me any questions.
Cheers!
Dan (wotbrew)#2020-08-2416:54eggsyntaxWow, very cool idea! 👏#2020-08-2418:33martinklepschreminds me of https://github.com/riverford/compound & https://github.com/keechma/entitydb#2020-08-2418:33martinklepschHow do you maintain the indexes alongside the actual data? Are they metadata?#2020-08-2418:36wotbrewhttps://github.com/riverford/compound was developed by a colleague, we have both been thinking about this problem a long time.
idx wraps your collection, the indexes are just fields.#2020-08-2418:38martinklepschAh, that’s awesome! I’m a sucker for a little bit of backstory like this in readmes hahah#2020-08-2418:38eggsyntaxAh, I was wondering that too.#2020-08-2418:39martinklepschindexed-vector
;; =>
[{:name "fred"} {:name "ethel"}]
this snippet from the readme communicates to me that it’s still just the raw input data?#2020-08-2418:39wotbrewIt will look, taste and smell like the original vector...#2020-08-2418:41martinklepschinteresting, sounds like black magic to me 😂#2020-08-2418:41wotbrewThe wrappers implement the interfaces clojure/cljs provide#2020-08-2418:41wotbrewHopefully that makes sense 🙂#2020-08-2418:42zaneLooks neat! I’m really glad there’s more exploration happening in this space. 🙂#2020-08-2419:28carocadHey everyone, parcera just reached v0.11.2 containing a fix for some edge cases where comments and discard is treated just like whitespaces. Special thanks to @sogaiu for the detailed report and testing
https://github.com/carocad/parcera#2020-08-2509:29Lucy WangAnnouncing clj-statecharts: a state machine / statecharts library for clojure/clojurescript: https://github.com/lucywang000/clj-statecharts ". It supports most of the statecharts features.
Docs is here: https://lucywang000.github.io/clj-statecharts/ It already covers most of the basics, and I plan to enrich it soon.#2020-08-2513:35jacekschaeWanted to announce a new project I have been working on — it’s a video course; how to build REST API with Clojure using Reitit, Ring, Integrant, and next.jdbc - https://www.learnreitit.com/#2020-08-2612:13plexusFunnel 0.1.42 is out. Funnel is a websocket+transit message hub meant to provide persistance of connections and discoverability for tools talking to JavaScript (ClojureScript) runtimes https://github.com/lambdaisland/funnel/releases/tag/v0.1.42 This release adds a --daemonize flag so it's trivial to run in the background, and drops the built-in certificate (use [bhauman/certifiable](https://github.com/bhauman/certifiable) if you need SSL)#2020-08-2619:01bringeCalva version 2.0.124 is out with a fixed, slightly enhanced, and documented test runner. See the https://calva.io/test-runner/ for details. Join us in #calva if you want to chat. simple_smile#2020-08-2619:10pezWhen is Test Explorer integration coming? 😃#2020-08-2619:24bringe😂 Hopefully soon enough#2020-08-2717:10ikitommi[metosin/jsonista "0.2.7"] is out! Jsonista is a fast JSON decoder & encoder on top of Jackson Databind. This version adds:
• new prebuilt keyword-keys-object-mapper for easy support of Keywords keys
• updateds to latest Jackson versions
• ships with new JMH-based perf tests claiming it’s faster than vanilla Jackson on encoding 🤪
https://github.com/metosin/jsonista#2020-08-2717:11ikitommiif someone can share what’s wrong with the perf test setup, I’m all ears.#2020-08-2717:46seancorfieldseancorfield/depstar {:mvn/version "1.1.104"} is available -- for building JAR/uberjar files using the Clojure CLI/`deps.edn` https://github.com/seancorfield/depstar
Enhancements:
* Fix #37 by adding -X / --exclude to provide one or more regex used to exclude files from the JAR.
* Fix #35 by providing hf.depstar.jar/run and hf.depstar.uberjar/run as entry points that can be used by the (new) Clojure CLI -X option (to execute a specific function and pass a map of arguments).
* Fix #34 by adding -P / --classpath option to specify a classpath to use (based on PR #36 @borkdude).
* Fix #33 by allowing destination JAR filename to appear anywhere on the command-line as well as adding a -J / --jar option for it.
Documentation:
* Address #31 by clarifying in the README that (:gen-class) is required for AOT.
Follow-up in #tools-deps#2020-08-2717:47seancorfieldThe Clojure CLI -X option is available in prerelease builds of clojure (not the stable build) and is subject to change -- and the run functions here may also change to track that feature, if necessary.#2020-08-2718:17borkdudeA fork of this library is going to appear in babashka 0.2.0. Thanks for the lib!#2020-08-2718:22seancorfield@borkdude Is there anything I can do to the core code that will make it easier to integrate into Babashka?#2020-08-2718:24borkdude@U04V70XH6 I basically just needed to get rid of references to AOT-compilation since that doesn't work with GraalVM#2020-08-2718:25borkdude#2020-08-2718:26borkdudeNot entirely true. Now I remember. It did compile. It only bloated the binary with another 30MB. Stripping away that code solved the problem.#2020-08-2804:16Vincent Cantin@U04V70XH6 That’s a very useful release. Thank you !#2020-08-2804:36seancorfield@U8MJBRSR5 hence the 1.1 release instead of 1.0 🙂#2020-08-2819:02borkdudeBabashka v0.2.0 is out! 🎉
New features: uberjar, better error message (context, locals, stack trace), support for clojure.datafy and more!
Release notes:
https://github.com/borkdude/babashka/blob/master/CHANGELOG.md#v020-2020-08-28
This release is sponsored by Clojurists Together!
Join #babashka to follow up.#2020-08-2819:21EugenDebian Clojure packaging BOF happening right now https://debconf20.debconf.org/schedule/venue/1/
https://debconf20.debconf.org/talks/33-clojure-packaging-team-bof/
https://pad.online.debconf.org/p/33-clojure-packaging-team-bof#2020-08-2916:59danielcomptonClojurists Together is supporting clj-kondo, Datahike, Malli, and Practicalli: https://www.clojuriststogether.org/news/q3-2020-funding-announcement/. Thanks to all our members who made this possible.#2020-08-3009:35LasCongrats @U05254DQM, your work making Clojure accessible to a wider audience is of tremendous value and importance to the Clojure community!#2020-08-3013:56practicalli-john@U7JKD4ENQ thank you for the kind words, it really helps with my daily motivation.#2020-08-3021:29uochanJust released antq ver 0.7.0, Tool to point out your outdated dependencies.
https://github.com/liquidz/antq
Belatedly added support to check git libraries version:slightly_smiling_face:#2020-08-3102:31Chris McCormicknpm init shadowfront YOUR-APP-NAME will get you a shadow-cljs + Reagent project bootstrapped.
I made this in July and apparently forgot to tell anybody about it. facepalm
https://www.npmjs.com/package/create-shadowfront#2020-09-0108:33Ivar Refsdalivarref/memoize-ttl {:mvn/version "2020.09.01"} is released, a tiny library that lets you cache function return values for a dynamic number of seconds.
https://github.com/ivarref/memoize-ttl#2020-09-0109:29vlaaadCool little lib! A bit off-topic, but I thought it would be nice if namespace to require was the same as maven coordinate (e.g. (require 'ivarref/memoize-ttl)). That way both in code and in tooling I would have the same identifier which is more consistent.#2020-09-0109:45Ivar RefsdalThanks for the feedback. That might make sense. I've seen different styles used, I followed https://github.com/cjohansen/clj-event-source
Maybe I will change to your suggested style later.
Is there a guide for this somewhere?#2020-09-0120:23Ivar RefsdalI've implemented your suggestion @U47G49KHQ, thanks for the input!#2020-09-0110:32slipsethttps://github.com/clj-commons/clj-yaml version 0.7.2 was just released. Bumping of underlying libs and exposing some more config options.#2020-09-0110:40borkdudeCool, will bump in next babashka release!#2020-09-0218:01blueberryNeanderthal 0.36.0 released! High-speed vector, matrices, and linear algebra in Clojure on CPU & GPU! Supports Intel, Nvidia, and AMD!
http://neanderthal.uncomplicate.org#2020-09-0220:34tony.kayThanks to the initial work of @mdhaney and the continued polishing by @tylernisonoff we now have Datomic Cloud support in the RAD Datomic adapter. I’ve released version 1.0.0 of fulcro-rad-datomic, and the fulcro-rad-demo now has a datomic-cloud branch that demonstrates the support.
https://github.com/fulcrologic/fulcro-rad-datomic
https://github.com/fulcrologic/fulcro-rad-demo/tree/datomic-cloud#2020-09-0313:17RobWe are open-sourcing Sequence! it’s an early version, but solves a lot of problems I had working for fintechs companies. I published some of the design on this blog post: https://decimals.substack.com/p/things-i-wish-i-knew-before-building (also linked in the readme)
https://github.com/decimals/sequence#2020-09-0407:50jeroenvandijkNice 🙂 @U010WB5T5EW What is the licence of this project?#2020-09-0411:27Rob@U0FT7SRLP thanks for noticing! just added, Apache 2.0#2020-09-0709:40vncz@U010WB5T5EW Nice, it looks like you're using Stoplight to document the API of the project 🙂#2020-09-0709:56vncz@U010WB5T5EW I've designed and implemented Prism: https://github.com/stoplightio/prism#2020-09-0713:43RobHey @U015VUATAVC, great meeting you. I love Stoplight and all the OSS projects#2020-09-0807:52vncz@U010WB5T5EW Sweet. Help me convince the company to switch to Clojure troll#2020-09-0821:15RobI tried to make my last employer switch too, they didn’t, so I left, created my own company and it’s all Clojure now :rolling_on_the_floor_laughing:#2020-09-0910:18vnczI wish I'd be brave enough as you were 🙂#2020-09-0313:46danielszI hope you'll enjoy reading my latest blog post on Meyvn, if only for the historical tidbits around Clojure tooling.
"When we we say that Clojure is hosted on the JVM, we often forget the corollary, that Clojure tooling is built on Maven. We'd be forgiven for the oversight: the tooling is good at keeping Maven out of sight. But Maven is everywhere: in Clojars as the repository format, in Boot where Pomegranate is used as the interface for the Maven resolver, in `tools.deps` which harnesses the Maven resolver directly... Meyvn takes the ubiquity of Maven to its logical conclusion, delegating all tasks to Maven's execution engine."
Oh, and did you ever wonder where Leiningen gets its name from? https://danielsz.github.io/blog/2020-09-01T1556.html.#2020-09-0314:09danielszOh, sorry about that. Thanks!#2020-09-0416:50Alex Miller (Clojure team)A new prerelease version of clj is now available (1.10.1.672):
• See https://insideclojure.org/2020/09/04/clj-exec/
• -X now supports multiple aliases, aliases with other argmap options like :extra-deps, and ad hoc functions
• new argmap alias keys :ns-default and :ns-aliases can be supplied to make using ad-hoc functions simpler
• -M is now used to invoke clojure.main, also supports aliases with other argmap options
• -P is a new option to "prepare" your execution (download deps, cache classpath etc, but not exec) - useful for dryrun-esque capability particularly when preparing containers etc
• -R, -C, -T, -O have been removed (use -X, -M or -A for repl invocation instead)
• argmap keys :deps/:paths have been renamed to :replace-deps/:replace-paths (old will still work in deprecated mode for a while, but not forever)
• argmap keys for -X :fn and :args were renamed to :exec-fn and :exec-args
• -Stree, -Spom, and -Sresolve-tags are now programs you invoke with -X on the built-in :deps alias: -X:deps tree, -X:deps mvn-pom, -X:deps git-resolve-tags Also, the mvn local install program is now similar -X:deps mvn-install. These are all leveraging the new :ns-default arg.
• Docs for all this stuff can be found in a https://clojure.org/reference/deps_and_cli_prerelease which will exist until this is the next stable version, hopefully soonish
• Feedback welcome in #tools-deps before this gets promoted to stable!#2020-09-0510:51Eugene Koontzhttps://github.com/ekoontz/wikiparse/blob/master/README.md, a library for retrieving wiktionary pages from wiktionary dumps#2020-09-0511:24practicalli-johnMonthly update of Library versions for practicalli/clojure-deps-edn, a collection of aliases and tools to support Clojure development across all your projects.
The :outdated alias in practicalli/clojure-deps-edn is used to run antq to get the latest Maven-style versions as well as the latest GitHub SHA commits.
Full details are in the http://CHANGELOG.org (I use org as antq prints out a table of current and latest versions and org-mode can manipulate ascii tables easily)
https://github.com/practicalli/clojure-deps-edn/commit/46d48e5fb814fd8da9c233d5c6cf83bc33358bd8#2020-09-0713:41tvaughanHi @U05254DQM. I'm the author of kibit-runner. I've turned off notifications for most of my github and gitlab projects. I do check them occasionally, but if there's ever a problem that needs quick attention feel free to @ me here#2020-09-0611:28Karol WójcikFirst release of cljss-react-jss v0.0.1: https://github.com/FieryCod/cljs-react-jss
Library provides interop between css-in-cljs & react-jss. For now only Higher Order Components API is supported. SSR & regular client side styles generation works fine
Example: https://github.com/FieryCod/cljs-react-jss/blob/master/src/dev/css_cljs/repl/rum.cljs
Feedback welcome :)#2020-09-0801:01Lucy WangHow does it compare to https://github.com/khmelevskii/emotion-cljs ?
I took a brief look and it looks like cljs-react-jss supports reagent component, but emotion-cljs only supports react components defined in js (e.g. material-ui). Cool!#2020-09-0805:15Karol Wójcik@UP90Q48J3
Don’t know much about emotion-cljs.
My motivation was to have fully working solution for both SSR on Node server and client side css generation.
I wanted it to be as thin layer as only possible so I could transfer all the hard stuff on peeps from react-jss which is mature enough library.
Therefore css-in-cljs is like react-jss but for cljs. HoC API is fully supported and it should work just fine. On the other hand there is still hook API to be implemented which is kinda experimental thing for Reagent, so I resist to implement it now.
#2020-09-0706:43seancorfieldseancorfield/clj-new {:mvn/version "1.1.215"} -- Generate new projects from Leiningen or Boot templates, or clj-template projects, using just the clj command-line installation of Clojure! -- https://github.com/seancorfield/clj-new
* Support upcoming clojure -X option by providing clj-new/create and clj-new/generate as entry points that can be used to execute a specific function and pass a map of arguments. (#41)
* Update to depstar 1.1.104 in templates (which also includes clojure -X support).
* Update to tools.deps.alpha 0.9.782 and use the runtime basis instead of trying to read the default deps.edn files. (#42)
All follow-up to #clj-new (yes, a new channel, so we don't clog up #tools-deps with discussion about clj-new, or depstar, which also has its own channel now: #depstar )#2020-09-0713:25Vincent CantinThat’s great !#2020-09-0913:54borkdudeClj-kondo v2020.09.09 ✨
New features: parallel linting, ignore hints, home config, config-paths
Release notes: https://github.com/borkdude/clj-kondo/blob/master/CHANGELOG.md#v20200909
This release is funded by Clojurists Together.
Follow up in #clj-kondo. Happy linting!#2020-09-1003:03tony.kayI’m happy to announce the release of Fulcro 3.2.16. This version adds a new plugin to support completely synchronous operation (sans remotes) which can be used to improve regular application performance, but can also be used to enable trivial full-app testing that has no asynchrony even in js. It also removes some internal debugging logic that was unnecessary and affected dev-time performance.
See the new chapter in the book at: http://book.fulcrologic.com/#_synchronous_operation
https://github.com/fulcrologic/fulcro#2020-09-1006:32orestisI’m finally in a position to announce Reseda, a Clojure-y state management library for modern React. It’s based on a light-weight subscription store on top of plain Clojure atoms, and enabling Suspense use even in stable React.
See more at https://github.com/orestis/reseda, discuss and follow up in #react#2020-09-1013:58athomasoriginalVery cool!#2020-09-1106:29StefanVery cool indeed, I’m going to remember this for sure!#2020-09-1013:22jacekschae🚀 Learn Reitit is OPEN for ENROLLMENT 🥳
First videos will be available 21 Sep 2020 🎥
You can signup here — https://www.LearnReitit.com
If you bought any PRO coursers before there is an additional discount — check you email!#2020-09-1015:24Michaël SalihiGreat, can't wait @U8A5NMMGD! 🙂
In the meantime, maybe my version of @U04V70XH6's usermanager can be useful for some who want see an example and anticipate the libraries that are used in your video lessons.
Worth what it's worth, I put that there: https://github.com/PrestanceDesign/usermanager-reitit-integrant-example#2020-09-1119:18chuckleheadas a previous purchaser: if I haven't seen any emails regarding discounts, should I be concerned or just more patient? 🙂#2020-09-1123:21tbrookeI received an Email about a discount you should have received one#2020-09-1105:29conjunctiveI released a small library for generating CSV files of randomized dates.
There's heavy use of spec, transducers, and cgrand's beautiful library https://github.com/cgrand/xforms!
https://github.com/conjunctive/date-gen#2020-09-1107:08conjunctiveThanks @U8MJBRSR5!
Apologies for accidentally deleting your reply.
Yes, I originally wrote it to test another project I was working on, but decided to extract it into a small exploratory repo.#2020-09-1114:22uwoalways great to see cgrand's library in the wild! It should really be de rigueur!#2020-09-1105:51djblueportal 0.5.0: It's a clojure tool to navigate through your data like REBL.
The main highlights for this release are:
- You can pull values back into your repl from portal via deref or @
- The table viewer now has sticky headers and columns
- For more info https://github.com/djblue/portal/blob/master/CHANGELOG.md#050---2020-09-10#2020-09-1107:03chuckleheadI don't need JavaFX, this is great!#2020-09-1113:22Eddú MeléndezHi everyone, couple of months ago I started building a builpack for leiningen and it has been donated to paketo-buildpacks` With just one command the builpack will autodetect is a leining project, provid an jdk, provide lein, provide some adjustment to the jvm and create the image. At the end, you can run it with the docker commands you already know.
https://github.com/paketo-buildpacks/leiningen
In order to create an image with java 8 (if version is not specified will be java 11):
pack build hello-pedestal --builder paketobuildpacks/builder:base -e 'BP_JVM_VERSION=8.*'
https://asciinema.org/a/357310
You can also change the jdk provider
pack build hello-pedestal --builder paketobuildpacks/builder:base --buildpack --buildpack -e 'BP_JVM_VERSION=8.*
https://asciinema.org/a/357418
For java 11, the work around is to start it with --env JAVA_OPTS="-XX:MaxMetaspaceSize=104744K" for now.#2020-09-1118:48Alex Miller (Clojure team)A new prerelease version of clj is now available (1.10.1.681):
• Reinstate -R, -C, and -Spom from last week's prerelease (but still deprecated)
• TDEPS-155 - Some error message improvements for various bad coordinate cases
• Feedback to #tools-deps #2020-09-1212:22blueberryDeep Diamond 0.15.0-alpha released! https://github.com/uncomplicate/deep-diamond#2020-09-1222:59uochanJust released vim-iced ver 2.2.0, Clojure Interactive Development Environment for Vim8/Neovim.
Now supports #clj-kondo static analysis! clj-kondo
https://twitter.com/uochan/status/1304916698827382784#2020-09-1313:33dominicmI made a little CLI tool for displaying duplicates on the classpath: https://sr.ht/~severeoverfl0w/clj-classpath-duplicates/
Frequently duplicates are undesired, and lead to very confusing bugs. This tool can be used as part of a CI process to identify the introduction of duplicate files.#2020-09-1407:37rickmoynihan:thumbsup:
FYI it looks like this doesn’t work on java8 due to:
https://git.sr.ht/~severeoverfl0w/clj-classpath-duplicates/tree/master/src/io/dominic/clj_classpath_duplicates/core.clj#L38#2020-09-1407:46dominicmYeah, I spotted that toy and decided to be lazy. It's such a convenient thing...#2020-09-1407:46dominicmI should just write a read/drop loop though...#2020-09-1407:47rickmoynihanYeah I hadn’t seen it before, a nice addition to jdk11 for sure#2020-09-1509:32borkdudeOnline terminal REPL implemented with xterm.js + the small clojure interpreter:
https://babashka.org/xterm-sci/
source: https://github.com/babashka/xterm-sci
I'm sure there are a few input/output handling edge cases. Feel free to follow up in #sci. Thanks to @plexus for the idea.#2020-09-1704:49EugenLooks awesome @plexus . Congrats. What was the use case for building it?#2020-09-1706:57borkdudeIt can be used to showcase your CLJS libraries in a terminal setting.#2020-09-1707:18Eugenthanks. From what I read it seems that I could implement a scripting terminal to my clojure / java app and expose the internals (spring beans, etc) ?
Use cases would be - level 3 support, changing app behavior at runtime or doing one off scripts that are not yet exposed via api#2020-09-1707:21Eugen@U04V15CAJ: Regarding your use case: can I load clojurescript libraries dinamically in the terminal running in my browser ?#2020-09-1707:24borkdude@U011NGC5FFY Not like that. Right now you would have to compile your library along and connect it into the sci options:
https://github.com/borkdude/sci
And then host it somewhere.#2020-09-1707:25borkdudeBut sci can be used for the things you mentioned.#2020-09-1707:25borkdudeThere is a REPL example in the examples dir of sci#2020-09-1707:26borkdudeBut there is also babashka.nrepl which can be used to expose an nREPL server to your sci environment.#2020-09-1707:27Eugenthanks, I love that about it. I was looking for a language that is safe to embed in an back-end app to expose internal services for maintenance operations not yet implemented in API#2020-09-1707:29borkdudeyes. it's safe in the sense that you control what people can execute#2020-09-1707:30borkdudewe also have some options to restrict infinite seqs#2020-09-1707:30EugenI will check that one up as awell, thanks.
I would like to offer my appreciation for your help with clojure and in general.
You are awesome and if you ever think I can help, just let me know.#2020-09-1707:31borkdudebut it's still possible to craft examples that will run for a long time - we haven't quite solved that problem
https://github.com/borkdude/sci/issues/348#issuecomment-692985383#2020-09-1707:32borkdudea solution would be to run this within a thread and just kill the thread after some timeout#2020-09-1707:32borkdudeon the JVM that is. The same solution is taken by nREPL when you press ctrl-c.#2020-09-1707:33borkdudein the browser this is more difficult#2020-09-1707:35Eugenhave you looked at web assembly? I don't know if it makes any sense (just started reading about it).
https://dzone.com/articles/webassembly-threads-in-firefox
WebAssembly works in most modern browsers>
Not sure if clojurescript could be made to work with web assembly (don't know about garbacge collection).
But if it can, we can have a very powerfull clojre / clojurescript experience .#2020-09-1707:36EugenWebAssembly does support threads and can be called from JS.#2020-09-1707:36Eugenbrowser support seems good https://caniuse.com/?search=webassembly#2020-09-1707:58borkdudeThere's also webworkers, but I don't think they can access the dom#2020-09-1707:58borkdudeThe execution length problem is more or less only a problem for scripts you don't control#2020-09-1707:58borkdudeI guess the worst thing that could happen is that your browser freezes#2020-09-1707:59Eugen🙂 for running things in browser yes, but for using sci on back-end via xterm.js ...#2020-09-1708:00borkdudelike I said, then you can run things in threads which you can kill on timeout#2020-09-1708:00Eugenneither web workers nor web assembly can access dom. they need to do that via JS.#2020-09-1708:00EugenJS can call functions in WebAssembly and web Assemly can call JS so there is a lot of room for how to do that#2020-09-1708:01borkdudecool. well, if you want to figure this out, that'd be cool#2020-09-1708:12EugenI'll look into it when I have a more concrete use case. Right now I'm just exploring WebAssembly.
They do have an open spec for GC https://github.com/WebAssembly/proposals/issues/16
and a v1 implementation https://github.com/WebAssembly/gc .
I think it would be worth exploring having a clojure version on web assembly once GC is in place.#2020-09-1708:31borkdudeThe concrete use case for this is interpreting scripts from other users in something like https://github.com/athensresearch/athens#2020-09-1708:32borkdudeMaybe @U0FT7SRLP can you tell more about it#2020-09-1708:41EugenI'm a bit ashamed to admin it's not clear what Athens does.
I've looked at the github page and some other docs and as a new commer I have no idea what it does.
Does it make beer 😄?#2020-09-1708:49borkdudeIt's something like Roam. I have used neither myself.
https://roamresearch.com/#2020-09-1708:53EugenI just read the description of Roam and I think I understand what it does.
I've been looking for something like this to start a journal 🙂 .
I'll check it out#2020-09-1708:57Eugenbtw, WebAssembly source looks very much like a LISP https://github.com/WebAssembly/threads/blob/master/proposals/threads/Overview.md .
https://developer.mozilla.org/en-US/docs/WebAssembly/Understanding_the_text_format#2020-09-1709:17jeroenvandijk@U011NGC5FFY Regarding the (potential) power of Sci, yes Athens or Roam are future potential use cases, allowing for safe third party extensions. Sci/Clojure is a lot easier to contain than Javascript is, and a much better programming model. For current inspiration, I would look at https://observablehq.com/ this only supports javascript, but imagine a Sci variation. I think this is basically what (a part of) Athens could be#2020-09-1709:19Eugenthanks, looks very interesting (and nice)#2020-09-1709:35jeroenvandijk@UUY06DFL5 Might be able to explain Athens or it’s current status a bit better :)#2020-09-1709:45EugenI'm curios about that. I'm working to grow a clojure company and I'm looking for an intranet tool.
Not sure if Athens fits this profile yet.#2020-09-1710:10jeroenvandijkI think the important things that are still missing are persistence and an authorization layer. So probably not a good fit yet, if that’s not the core of your product at least#2020-09-1717:47plexusThe original use case for this (and one we may still pursue) is to add a drop down repl to lambda island, and to offer various features and customizations over time via the repl#2020-09-1717:48plexusTo answer your question @U011NGC5FFY#2020-09-1717:49borkdude@plexus Made various improvements to the babashka/xterm-sci. Single quotes work. Pasting multiple sexprs. Dealing with incomplete input. Println, prn, pr, etc.#2020-09-1717:50borkdudeIt depends on a fork of local-echo: https://github.com/babashka/local-echo#2020-09-1717:50borkdudeAlso made a PR to the original one, but they're not fast to respond#2020-09-1719:27jeff tangRoam allows arbitrary css, js, html, and even some hiccup and datalog. This is fun because it opens up user customization and programmable apps. But it's of course not as secure! This is why JS execution in Roam has this UI https://roamresearch.com/#/app/help/page/3l_9j6aAv#2020-09-1719:29jeff tangMy hope is that Athens will have a plugin system that is both powerful (arbitrary code), but also safe, so something like sci would be great. But it's not a priority atm. hope that helps @U011NGC5FFY#2020-09-1719:37borkdude@UUY06DFL5 I think the warning is great. Even with sci we cannot guarantee the length of execution time currently, but maybe allowing users to flag scripts as malicious or something would help in that regard.#2020-09-1516:20plexusJDK 15 general availability https://mail.openjdk.java.net/pipermail/announce/2020-September/000291.html#2020-09-1516:40dominicmAnything exciting in JDK15 anyone knows of? I've not followed along really.#2020-09-1516:42orestisNashorn is truly removed #2020-09-1516:42orestisZ1 is stable #2020-09-1516:49seancorfieldMulti-line strings with """#2020-09-1516:49seancorfield(that's Java language, not JVM, so not useful to us)#2020-09-1516:49seancorfieldAnd we should probably follow-up in #java#2020-09-1516:51dominicmhttps://www.techgeeknext.com/java/java15-features
I'll probably look at 12/13/14 too as I didn't follow those either as I only am interested in lts versions.
Not sure if they are rolled up or not.#2020-09-1516:57dominicmI know we won't see clojure using this for a long time, but anonymous classes seem like they might be really handy https://openjdk.java.net/jeps/371#2020-09-1517:03dominicmLooks like this isn't the LTS release. That'll be 1 year from now.#2020-09-1517:06seancorfieldI thought 17 is the next LTS?#2020-09-1517:10dharrigan6 month release cycle, so 16 is next, then 17 in 1 year which is LTS.#2020-09-1704:44EugenThere are some interesting projects in JVM / JDK land. Loom and Valhalla are probably the most interesting https://openjdk.java.net/projects/loom/#2020-09-1704:45EugenLoom aims to bring tail call elimination. Looking forward to seeing that.#2020-09-2504:15emccueThe devs have been pretty vocal about "LTS" not meaning anything to them#2020-09-2504:15emccueSo the latest version is the best supported version - LTS is arbitrary based on whatever companies want to do with regards to paid support#2020-09-2506:07orestisYes and no - eg. on AWS it’s nice to know that Amazon will apply security fixes to Coretto for a long time. #2020-09-2508:05dominicmThe clojure devs feel differently :)#2020-09-2508:05dominicmClojure only officially supports lts the#2020-09-2516:31seancorfieldWell, "officially support" is open to interpretation. Clojure itself is tested against 8, 9, 10, 11 right now (Oracle and OpenJDK versions) per https://build.clojure.org/job/clojure-test-matrix/#2020-09-2517:46dominicmI'm surprised by 9/10.#2020-09-1520:49tony.kayI’m pleased to announce Fulcro 3.3.0. This release has a few new tools that make hot code reload even better. In prior versions a change to a query when using dynamic queries would not be properly seen if nested. This new version provides a function you can call as part of your hot reload refresh that will scan for changes like that and fix them.
https://github.com/fulcrologic/fulcro
http://book.fulcrologic.com/#_hot_code_reload_and_dynamic_queries#2020-09-1522:48cjmurphyFulcro RAD now has another possibility for storage: Key Value stores (in general). The repository is setup as another RAD Demo, just to demonstrate it all working. Please take a look: https://github.com/fulcrologic/fulcro-rad-kvstore#2020-09-1704:44EugenThere are some interesting projects in JVM / JDK land. Loom and Valhalla are probably the most interesting https://openjdk.java.net/projects/loom/#2020-09-1607:26vlaaad#reveal 1.0 is released! Reveal is a Read Eval Visualize Loop for Clojure
https://vlaaad.github.io/reveal/#2020-09-1615:25wilkerluciothis is great! I'm having a lot of fun playing with, thanks for this! also great docs, kudos for all the gifs :thumbsup:#2020-09-1616:19vlaaad^_^#2020-09-1617:35markusNice!#2020-09-1620:05Karol WójcikIs it possibile to use it alongside cljs?#2020-09-1620:18vlaaad@UJ1339K2B Reveal is pretty closely tied to JVM. It can talk to remote processes via prepl — https://vlaaad.github.io/reveal/#remote-prepl — but it's exploration capabilities will be limited to inspecting data that arrived over the network.#2020-09-1620:33Karol WójcikThank you @U47G49KHQ #2020-09-1720:12JorinHi, while not strictly Clojure, I think this might be interesting for you if you touch Node.js or browsers.
I created a EDN parser and generator for JS.
Why?
I needed a parser that allows streaming EDN data in Node.js,
and I also wanted TypeScript support and I wanted to work with plain data in the JS world.
If this sounds interesting to you, check it out:
https://github.com/jorinvo/edn-data
I am happy about any feedback or help improving the project 😊#2020-09-1720:34borkdudeVery cool!#2020-09-1806:11JorinThank you :)#2020-09-1721:08wilkerlucioI'm pleased to announce that I'm working on a new version of Pathom! The project still in progress, today Im here to announce the post with details about it, you can check it at https://wilkerlucio.github.io/pathom-3-is-coming/. The source for the new Pathom is available at https://github.com/wilkerlucio/pathom3. Its a WIP, don't use yet.#2020-09-1802:23Vincent CantinThis looks awesome. I will use it in my framework.#2020-09-1721:56borkdudedynaload 0.2.2: better support for GraalVM binaries and LazyVar now implements IFn
https://github.com/borkdude/dynaload#graalvm#2020-09-1811:30refsetCrux 1.12 is out! Featuring: aggregates, predicate destructuring, subqueries, a revamped module config system and Azure Blob document storage (generously contributed by @luposlip 🙏). More details over on #crux and on GitHub https://github.com/juxt/crux/releases/tag/20.09-1.12.0#2020-09-2120:04mauricio.szaboJust published a new version of socket-repl package for Atom - Chlorine. This version is just bugfixes, but are some new features that can be interesting, for example, to render a hiccup-like tag :div/clj and :div/ansi that will use Chlorine's renderer for objects (or a text that will convert ansi codes to HTML). This means that you can, for example, run a test code and instead of the "default Clojure result" that you'll see in the REPL, you can render the test result in any way you want. Here's an example: https://gist.github.com/mauricioszabo/c2a756d5f5e363f6539cdad212815df1
More information on #chlorine channel 🙂#2020-09-2123:44uochanJust released vim-iced ver 2.3.0, Clojure Interactive Development Environment for Vim8/Neovim.
https://github.com/liquidz/vim-iced
Renaming symbols is suppored! Thank you so much, @nbardiuk !#2020-09-2211:35practicalli-johnA great addition to the family of Clojure editors and great to see even more support with Vim.
I've include links to vim-iced in my collection of suggested Clojure editors
https://practicalli.github.io/clojure/clojure-editors/#vimiced
Thank you for all the work on this (and you other projects).#2020-09-2202:25Alex Miller (Clojure team)clj 1.10.1.693 (prerelease) is now available:
• Classpath ordering changes. Classpath will always now be ordered extra-paths, paths, then libs. Libs are ordered by tree depth, then alpha. These changes both revert some ordering changes in the last stable release and go further in defining a reproducible classpath order.
• clj -Stree re-enabled for now while we decide on best way to convey classpath-changing options to -Stree and -Spom
• Windows scripts updated to latest
• This prerelease version should be considered a release candidate for the next stable version! If you try it and have feedback, please leave it in #tools-deps #2020-09-2213:25bruno.bonacciHi all,
i’ve just released https://github.com/BrunoBonacci/mulog v0.5.0 with the following changes/fixes
• new Prometheus publisher (thanks @brandon746)
• Now with 10+ publishers
• fixes to namespace tracking (thanks @ddouglass)
• Zipkin publisher support for external trace ids
• Updated dependencies.
Online doc on cljdoc: https://cljdoc.org/d/com.brunobonacci/mulog/0.5.0/doc/readme#2020-09-2213:36athomasoriginalNice! I’ve been working on a new CLJ/S project and have configured my logging, but this has me curious. Do you see this used in combination with something like clojure.tools.logging or as a replacement? The “Motivation” section of your docs has me thinking they work together.
Apologies if this is not a great place to start this convo. Let me know if there is a better place. Thanks again, the library looks great!#2020-09-2213:42bruno.bonacciHi, in https://cljdoc.org/d/com.brunobonacci/mulog/0.5.0/doc/f-a-q-#q-can-i-use-%CE%BClog-as-the-sole-logging-library-and-send-my-traditional-logging-to-it I discuss my point of view on this.#2020-09-2213:43bruno.bonacciTL;DR> Although possible, there are even supporting libraries, is something that in the general case I wouldn’t recommend.
But every case is different so you are free to try and see how does it work for you.#2020-09-2214:18athomasoriginalGreat. I can see this as a nice way to instrument the code with metrics and not be bound to a single provider library like iapetos - (Not a knock against this library - it works well)#2020-09-2217:44just.sultanovA simple response unifier v0.1.0 has been released. The next generation of clj-unifier. Any feedback welcome.
https://github.com/anywhere-ninja/unifier#2020-09-2222:08eggsyntaxFor what it's worth, I don't really know what a response unifier is or why I would want one, and I didn't really feel clearer on it after looking at the readme 🤷#2020-09-2306:08just.sultanov@U077BEWNQ thank you for the feedback. I added rationale to the readme#2020-09-2306:17sogaiui feel more informed by this addition -- ty!#2020-09-2311:38eggsyntaxThanks!#2020-09-2313:31tony.kayI just released updates to two Fulcro libraries:
Fulcro 3.3.5: Mainly minor issue fixes. There is a new react error boundary helper that was released in a non-announced version.
Fulcro Spec 3.1.8: Fixes a few minor issues with terminal reporter (now shows compiler errors, and improvements for color schemes)
https://github.com/fulcrologic/fulcro
https://github.com/fulcrologic/fulcro-spec#2020-09-2317:14alekczFire v0.3.0 is out! No more dependency on the Google Java SDK. Enjoy Firebase's RTDB with some lightweight Clojure goodness. It's compatible with GraalVM too, so #babashka here we come!
https://github.com/alekcz/fire#2020-09-2415:19wilkerlucioHello everyone, today I'm releasing [com.wsscode/js-interop "0.0.1"], this library provides an alternative way to read CLJS data structures from JS using JSON-like interface. Check more details at the release post https://wilkerlucio.github.io/alternative-to-clj-js/, and I open a discussion space on Clojureverse https://clojureverse.org/t/an-alternative-to-clj-js/6591. Library code at https://github.com/wilkerlucio/js-data-interop. Cheers!#2020-09-2417:35mkvlrare you aware of https://github.com/applied-science/js-interop ?#2020-09-2421:20wilkerluciohello, no, wasn't aware, seems a nice library for dealing with JS obj directly, the thing I'm doing is quite different with JS proxy, do you think the name is an issue?#2020-09-2504:58sergey.shvetsI also use https://github.com/mfikes/cljs-bean for pretty much all my projects.#2020-09-2511:53mkvlr@U066U8JQJ not sure, maybe a renaming the artifact to com.wsscode/js-data-interop to unify with the github repo if it’s not too much work? But also not a big deal I think, guess it’s what namespaces are for.#2020-09-2514:34wilkerlucioI'm not attached to the name, I'll change to js-data-interop in a next release to reduce confusion 👍#2020-09-2513:27borkdudeBabashka, a native scripting env for Clojure, v0.2.1 released:
- http-kit client + server
- support for implementing IDeref and IAtom
- clojure.pprint/cl-format
and multiple fixes and enhancements. Thanks @cljtogether for sponsoring this release.
Release notes:
https://github.com/borkdude/babashka/blob/master/CHANGELOG.md#v021-2020-09-25
Visit #babashka for questions.#2020-09-2518:45Alex Miller (Clojure team)https://clojure.org/releases/tools#v1.10.1.697 is now available (this is a release, NOT a prerelease)
• Added https://clojure.org/reference/deps_and_cli#_executing_a_function (-X)
• Added https://clojure.org/reference/deps_and_cli#_prepare_for_execution (-P)
• Expanded https://clojure.org/reference/deps_and_cli#_running_a_main_or_script (-M) to support all argmap arguments
• Added new argmap attributes for https://clojure.org/reference/deps_and_cli#namespaces: :ns-aliases and :ns-default
• Added new https://clojure.github.io/tools.deps.alpha/clojure.tools.cli.api-api.html available via -X:deps alias (git-resolve-tags, mvn-install, mvn-pom, tree)
• Deprecated -R, -C (use -X, -M, or -A instead)
• Deprecated unqualified lib names in deps.edn (use fully qualified lib names)
• Deprecated alias tool args :deps and :paths (use :replace-deps and :replace-paths)
• Removed -O (use -X, -M, or -A)
• Removed -Sresolve-tags (use -X:deps git-resolve-tags)
• https://clojure.atlassian.net/browse/TDEPS-152 - Fixes to -Spom generation with srcDirectory
• https://clojure.atlassian.net/browse/TDEPS-155 - Better error handling for bad coordinates
• https://clojure.atlassian.net/browse/TDEPS-167 - Handle absolute resource paths in pom deps
• Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.9.810#2020-09-2519:14Alex Miller (Clojure team)https://clojure.org/releases/devchangelog#v1.10.2-alpha2 is now available
• https://clojure.atlassian.net/browse/CLJ-2571 Add Throwable return type hint to ex-cause
• https://clojure.atlassian.net/browse/CLJ-2572 Avoid reflection in clojure.data
• https://clojure.atlassian.net/browse/CLJ-2295 Eliminate duplicate doc string printing for special forms
• https://clojure.atlassian.net/browse/CLJ-2564 Improve error message for case
• https://clojure.atlassian.net/browse/CLJ-2580 Fix case expression branch analysis that resulted in compilation error
• https://clojure.atlassian.net/browse/CLJ-2469 Fix errors in printing some maps with namespace syntax#2020-09-2521:13seancorfieldhttps://github.com/seancorfield/readme 1.0.16 is available -- now auto-creates directories in the specified test path if necessary and exits with a non-zero status if the generated test file cannot be required (due to errors in your readme code, for example)#2020-09-2521:23rickmoynihan👌 very nice — I’ll not need to use org-mode for things like this now#2020-09-2608:25raymcdermottYet another place to enjoy Clojure things...
We are starting to host the apropos-clojure live stream on Discord as of the next episode on Wed 30th Oct 2000 CEST
Here is an invite link that will not expire:
https://discord.gg/39DHbU8
We will continue posting the recordings on YouTube for folks that can't or don't want to join live.
Hope to see you there
Ray#2020-09-2614:57borkdudeReleased deps.clj 0.0.10, a 100% Clojure port of the Clojure CLI
https://github.com/borkdude/deps.clj/releases/tag/v0.0.10
Parity with Clojure Tools 1.10.1.697#2020-09-2617:40practicalli-johnMajor change to the Practicalli Clojure deps.edn user wide configuration for Clojure CLI
Alias names are now qualified, using the pupose as the name, e.g. :project/new and :project/outdated . This makes alias names shorter whilst still conveying their use across all projects.
Examples of using aliases with the new -M and -X flags (where supported) have bee added and all instances of the -A flag have been deprecated or replaced. The -M flag replaces all previous uses of -R and -A.
Library versions used in all aliases updated as of today, 26th September 2020, using the :project/outdated alias that runs the very useful antq library.
https://github.com/practicalli/clojure-deps-edn#2020-09-2703:31tony.kayA pre-release version of the new Fulcro Inspect for Chrome has been released as a zip file you can install into Chrome (the store version will be held at the current version for a while). This version uses an improved db sync protocol that reduces dev time overhead, and doesn’t get out of sync as easily (should not fail at all). This version also includes an improved experience with custom transit types, and EQL tab that can run mutations properly, and revives the Element Picker tab.
This version REQUIRES Fulcro 3.4.0+ (which is only released as a SNAPSHOT so far).
https://github.com/fulcrologic/fulcro-inspect/releases/tag/chrome-3.0.0-RC1#2020-09-2915:46Alex Miller (Clojure team)FYI, I'm taking https://ask.clojure.org down for some maintenance today (wasn't sure where I should post this, sorry admin!)#2020-09-3007:50sylvainHello everyone. I've just made the first release of [ageneau/blossom "0.1.1"]. This library implements Edmonds's blossom algorithm for maximum weight matching in undirected graphs. The code is at https://github.com/ageneau/blossom. Feedback / comments welcome !#2020-09-3007:51martinklepschOmg, I’ve been close to attempting this a few times, amazing! #2020-09-3007:52martinklepschIs this Blossom or Blossom V? And remind me, does blossom support matching groups bigger than 2?#2020-09-3008:00sylvainIt works for non-bipartite weighted graphs. It's not blossom V (Blossom V refers to https://pub.ist.ac.at/~vnk/papers/blossom5.pdf right ? ). It's based on Galil's paper: http://www.cs.kent.edu/~dragan/GraphAn/p23-galil.pdf#2020-09-3008:07martinklepschCool! #2020-09-3008:11martinklepschVery curious to hear more about what you’re using this for if you don’t mind sharing ☺️#2020-09-3008:18sylvainI had plans to make a swiss pairing system for chess tournaments.#2020-09-3016:57blueberryNeanderthal 0.37.0 released! Clojure fast vector, matrix, & linear algebra library. Now automatically detects Apple's OpenCL platform and work around the bugs in the driver.
http://neanderthal.uncomplicate.org
This https://twitter.com/hashtag/opensource?src=hashtag_click work is funded by 2 books! Subscribe at https://aiprobook.com and read 500 pages that are already available now.#2020-10-0111:39blueberryCUDA 11 support in new ClojureCUDA 0.11.0 release!
http://clojurecuda.uncomplicate.org
https://github.com/uncomplicate/clojurecudahttps://t.co/VtzDRQ6ozo?amp=1
http://aiprobook.com#2020-10-0111:59timo#2020-10-0114:39rutledgepaulvCreated a piece of ring middleware for implementing ip-based access to a clojure app (or sections of an app). Feedback welcome! https://github.com/RutledgePaulV/ring-firewall-middleware#2020-10-0114:56vnczhttps://github.com/RutledgePaulV/ring-firewall-middleware/blob/master/src/ring_firewall_middleware/core.clj#L68 @U5RCSJ6BB Use constantly ?#2020-10-0114:58rutledgepaulvcertainly could! sometimes i think defining the signature helps communicate the shape of the thing for people who choose to implement their own#2020-10-0118:38fjolnevery helpful README 🙏:skin-tone-2: #2020-10-0213:09magraVery nice! That opens up the possibility to place fine grained source-ip security for different routes.#2020-10-0213:40rutledgepaulvYeah, that's my primary use case. Restricting admin or prometheus metric endpoints on a public application.#2020-10-0200:37bbrinckI just released Expound 0.8.6. The main change is that it supports the new rewrite of Orchestra (i.e. version 2020.07.12-1 and above) https://github.com/bhb/expound#2020-10-0206:36flowthingI've been working on a Sublime Text 4 package for editing Clojure called Tutkain. If you'd like to give it a go, see https://tutkain.flowthing.me. (You'll need a Sublime Text license.)#2020-10-0213:34vnczIs there Sublime 4 @U4ZDX466T#2020-10-0213:37flowthingYes, but it’s currently in alpha. You can use it if you have a Sublime Text 3 license. Check out the Disclaimers section behind that link for a bit more info — there’s a link to the changelog and the Discord where you can find the download links.#2020-10-0213:38vnczThanks, I'm very curious about it#2020-10-0213:38vnczLooks like there's a lot of good stuff. Would love to get back to Sublime for development!#2020-10-0213:39flowthingWell, for what it’s worth, I’ve really been enjoying it so far.#2020-10-0213:39vncz@U4ZDX466T Is the project on GitHub or something we can take a look at? I do not have a Sublime Text 3 license, so I can't really try it 😞#2020-10-0213:42flowthingThere’s a GitHub link in the sidebar at https://tutkain.flowthing.me. But yeah, it’s at https://github.com/eerohele/Tutkain.#2020-10-0213:42vncz@U4ZDX466T Sorry, it's 8AM here, I haven't been caffeinated enough. I'll stop with the stupid questions 😄#2020-10-0213:43flowthingNo worries at all. 🙂 I’m happy to hear I’m not the only Sublime Text enthusiast around.#2020-10-0220:41tony.kayFulcro 3.4.2 is on clojars. Primarily improvements to dynamic routing namespace.
• Ability to change routes relative to an unknown parent
• Changed order of routing instructions to be depth first to reduce/eliminate flicker
• Fixed problem where relative routing could be denied by router that was not being affected (relative route change could still be denied by router above the affected change)
https://github.com/fulcrologic/fulcro
Actually, use 3.4.2-1. The first one had a CLJ issue for the CLJC file.#2020-10-0412:05blueberryNeanderthal 0.38.0 released, with CUDA 11 support!
Vectors, matrices, and linear lagebra in Clojure with incredible speed on CPU, Nvidia GPU, and AMD GPUs!
http://neanderthal.uncomplicate.org
https://github.com/uncomplicate/neanderthalhttps://t.co/0CBopKQUon?amp=1
http://aiprobook.com#2020-10-0412:25carocadparcera v0.11.4 is out. This release includes support for octal literals and two bug fixes for symbols and eval. Hope you like it 🙂. Thanks to @sogaiu for his support testing all the different scenarios.
https://github.com/carocad/parcera#2020-10-0415:23teodorluScicloj's interview with Anthony Khong about Geni is now available on YouTube. Geni, written by Anthony, is a REPL-friendly Clojure wrappper for Apache Spark.
Tune in to learn about how Anthony Khong got into data science, what limits Spark Notebooks, and how the situation changes with Clojure.
https://www.youtube.com/watch?v=3R2FJQdtLf8#2020-10-0418:15Jakub Holý (HolyJak)I cannot save it for later in YouTube because it is marked Made for Kids https://support.google.com/youtube/answer/9632097?nohelpkit=1&hl=en-GB#2020-10-0419:36seancorfield@U3X7174KS This sort of thing belongs in #news-and-articles and not in #announcements which is intended for project/library release announcements (per the topic of the channel).#2020-10-0504:01jumar@U04V70XH6 Maybe mention this policy in the topic then? To me this channel is a perfect place for this type of announcement (I didn't know about the other channel until now) but I'm fine with the other place if it's easy to find.#2020-10-0504:03seancorfield@U06BE1L6T read this channel's description -- it really is pretty clear.#2020-10-0504:04jumarI know (after I read it) but it's not clear where the other things should go. Also the channel name is quite generic#2020-10-0504:08seancorfieldThe description can't be expanded -- Slack has a limit there. I've updated the topic to point to other channels.#2020-10-0504:09seancorfieldMost people read the topic, see it's only for projects and libraries, and ask in #slack-help or #community-development about where they should post non-project/lib announcments.#2020-10-0504:10seancorfieldBTW, channel topics are also limited in length and, unfortunately, any member can change the topic so we're always at the mercy of members changing the topic -- it's not something Admins can control...#2020-10-0504:11seancorfield@U06BE1L6T Everyone is auto-joined to #events and #news-and-articles so I'm surprised you didn't know about them.#2020-10-0504:13seancorfield(also to #slack-help #beginners #clojure #off-topic -- from that initial set of seven channels, folks ought to be able to figure out how to get around here)#2020-10-0504:17jumarThanks, that helps. I wasn't there for some reason - maybe the "auto join" for this channel was only configured after I joined clojurians? (I think more than 3 years ago)#2020-10-0504:35seancorfieldEntirely possible -- but if you've been around that long, I'm genuinely surprised you haven't run across those channels by now... 🙂#2020-10-0506:05teodorlu@U04V70XH6 Thanks, for letting me know, I'll use #news-and-articles in the future.#2020-10-0506:07teodorlucc @U066L8B18#2020-10-0506:12teodorlu@U0522TWDA Thanks for the feedback! I can reproduce the problem, and I'll look into it.#2020-10-0419:42ziltiI made scripts on the OpenSUSE Build Service to make clj-kondo available to install https://software.opensuse.org//download.html?project=home%3Azilti%3Aclojure&package=clj-kondo, as well as an AppImage. The instructions have been merged into the clj-kondo repository. No more manual updates! https://github.com/borkdude/clj-kondo/blob/master/doc/install.md#2020-10-0420:02borkdudeThanks!#2020-10-0420:57CandidJoker v0.15.7 is released https://github.com/candid82/joker/releases/tag/v0.15.7#2020-10-0421:20danaborNew version of mate-clj is now available on clojars! 🚀
https://github.com/AppsFlyer/mate-clj#2020-10-0504:41delaguardoIs there a difference from tools.trace ?
https://github.com/clojure/tools.trace#2020-10-0506:40danabori would say its a bit different, the aim of mate-clj is to print to repl the steps of execution of the macro/fn and to give the developer more understanding about each step and how it got to the final result.#2020-10-0508:25delaguardobut that is exactly what tools.trace is trying to do
user=> (use 'clojure.tools.trace)
nil
user=> (trace-vars + reduce)
nil
user=> (reduce + [1 3 5 7 9])
TRACE t442: (clojure.core/reduce #object[clojure.tools.trace$trace_var_STAR_$fn__319$tracing_wrapper__320 0x71e5f61d "c
#2020-10-0508:26delaguardobut instead of having separate implementation for core functions it is instrumenting resolvable vars leaving implementation intact#2020-10-0512:56danaborthe thing is that I wanted to use a different method not wrapping all the fn so for example if i want to debug a specific execution of reduce and not all the executions in a code block if i have it more then one, also we are working working now on having the ability to set a kind of a level to it so you can control when it will be printed to the repl and when not depends on your needs.#2020-10-0515:19kennytiltonThe publicly available https://kennytilton.github.io/whoishiring/ browser (a Matrix JS app) has now been ported to CLJS Matrix: https://github.com/kennytilton/matrix/tree/master/cljs/whoshiring. Yay. Compare also with a pure CLJS Reagent https://github.com/kennytilton/matrix/tree/master/cljs/whoshiring and re-frame https://github.com/kennytilton/rehiring.#2020-10-0515:23dharriganThat's pretty awesome. Of course, the first thing I typed in was "clojure" 🙂#2020-10-0515:43djanusI had no idea that Cells was coming to CLJS!#2020-10-0516:04kennytilton@U11EL3P9U Yep: mine is “clojure or cljs or scheme or lisp”. I’ll throw in dart and flutter just to track those.#2020-10-0516:16kennytilton@UFR3C1JBU I gotta talk to my PR crew! 🙂 I ported Cells to CLJ/CLJS thru the awesomeness of CLJC ’bout five years ago, and instead of Qooxdoo on the front-end just went with mxWeb, a thin Cells-powered HTML wrapper. That is used in this latest whosHiring implementation. Thx for your Cells enthusiasm!#2020-10-0516:18kennytiltonps. If anyone wants to play with Matrix, ping me on #matrix and I will do up whatever doc you need. There are a bunch of demo apps, but they might have some bit rot. I’ll get those out of mothballs if desired.#2020-10-0517:59kennytiltonIt is a reactive hack akin to MobX, if you know that one. R/atoms have nice reactive capabilities, but last I looked suffered from glitches. Here is an old write-up. Skim down to “data integrity” for the gist. https://smuglispweeny.blogspot.com/2008/02/cells-manifesto.html#2020-10-0521:57Matthew CurryDidn’t know Cells was also here in clojure-land either, that’s awesome!#2020-10-0522:35kennytiltonThx, @UE67UFRDF! Cells actually picked up a few tricks moving to a non-OO basis, including instance-specific Cells and Cell-specific observers. Same in JS, btw, and in JS with defineProperty we get the same transparency as with CLOS. In CLJ we need to access properties with md-get to engage the cells wiring. Not the end of the world.#2020-10-0606:32viestiHi! I did a quick translation of the Largest-Triangle-Three-Buckets (LTTB) for Clojure: https://github.com/viesti/clj-lttb#2020-10-0715:25oliyHi everyone,
I recently needed a Server Sent Events (SSE) client that could send an Authorization header to the server. Incredibly js/EventSource doesn't support this, and general consensus seems to be you can use js/fetch and the response stream. That means you still have to parse the event stream yourself, so I wrote a library to do it: https://github.com/oliyh/oxbow
It's an SSE client for Clojurescript that uses js/fetch so that the full functionality of HTTP is available to you. It also has re-frame bindings 🙂#2020-10-0905:35Chris McCormickDoes it support the auto-reconnecting facility of EventSource?#2020-10-0907:36oliyNot at the moment, although I would like it to. It shouldn't be too hard to implement#2020-10-0912:53oliyhi @UUSQUGUF3 it now supports reconnecting as of 0.1.2, see the readme for details#2020-10-0719:01hkuptyGoing back to my journey w/ protobuf on clojure, I release https://github.com/hkupty/defteron/releases/tag/v0.2.0.
It's still pretty much alpha-quality and tested on-demand by my uses, so if you're feeling adventurous, I'd be happy to take PRs and improve it 🙂#2020-10-0723:17Alex Miller (Clojure team)Clojure tools 1.10.1.708 is now available https://clojure.org/releases/tools#v1.10.1.708
• Fixes to handling transitive deps when newer versions of a dep are found in the dep expansion
• https://clojure.atlassian.net/browse/TDEPS-168 - Improvements to -X error message handling#2020-10-0801:36ziltiI built Linux packages and updated them 🙂 Find them https://software.opensuse.org//download.html?project=home%3Azilti%3Aclojure&package=clojure for various distributions.#2020-10-0811:20littleli1.10.1.708 -> scoop ✔️#2020-10-0811:25ziltiI just got assigned maintainer role for the Chocolatey package, so that one will follow shortly (this weekend)#2020-10-0808:47katoxThe release 0.4.0 of PGMig is out https://github.com/leafclick/pgmig/releases/tag/v0.4.0
What's new:
• Native image capability to connect via TLS.
• More command line options checks.
Breaking changes
• Command line options have the highest priority (overriding environment variables)
• Environment variables have been changed to match psql environment
• Updated to GraalVM 20.2.0.
• No verbose logging defaults.
Gihub:
Pre-built x86_64 linux docker image is available at dockerhub (https://hub.docker.com/r/leafclick/pgmig)#2020-10-0814:18rutledgepaulvI've released [org.clojars.rutledgepaulv/ring-firewall-middleware "0.1.3"]. This release adds middleware for limiting or throttling concurrency and middleware for limiting or throttling request rates. The limits and throttles can be imposed globally or per some function of the request (useful for implementing per user or per tenant limits). https://github.com/RutledgePaulV/ring-firewall-middleware#2020-10-0816:45rdgdNice Paul! Killin' it per usual :-)#2020-10-0817:24ikitommiAfter a year in incubation, we are proud to present Malli, a new data validation and specification library for Clojure/Script! Big thanks to Clojurists Together for helping to ship it out.
Introduction post: https://metosin.fi/blog/malli/
In short, Malli covers:
• schema definitions, as data
• support for open and closed maps
• data validation and error reporting
• humanised and localised error messages
• spell-checking of map and multi keys
• bi-directional value transformation
• value and schema generation
• tools for programming with schemas
• support for JSON Schema, Swagger and DOT
• open apis for both end users and extenders
Coordinates:
• Github: https://github.com/metosin/malli
• Clojars: https://clojars.org/metosin/malli
• Slack: #malli
On behalf of Metosin and all contributors,
Tommi#2020-10-0820:27dangercoderawesome! already have a really good use case at work. Thanks!#2020-10-0822:03uwoGreat project. I'd suggest striking this from your blog post:
> Spec builds around [...] strong ideologies [...] Malli [...] aims to be pragmatic. The world is not perfect, it's ridden with nulls and optional keys and we should embrace them.
The link on "ideologies" to "Maybe Not", followed by the contrasting distinction of pragmatism appears to misconstrue the talk: optionality fused to the container spec is a trap, and it is more practical to compose optionality specs for specific contexts.#2020-10-0909:02borkdudeI think this is an interesting point by @U09QBCNBY, @U055NJ5CC#2020-10-0911:54ziltiThis is really great, congrats! I am using the library currently mainly for input validation for our project at work, and it performs flawlessly (being aware that I am severely under-utilizing it currently)#2020-10-0915:41oliy@U09QBCNBY i think that comparison to spec is more valid for spec 1, the changes hinted at for spec 2 would make it a weaker argument#2020-10-0918:58ikitommithanks for the feedback. I could have used better wording (maybe strong opinions about optionality?) and done better job explaining: Spec2 removes support for explicit optionality, making optionality an implicit subtraction of schema and select. For designing new things with Clojure, this might be a good thing, but when interacting with the outside world with optionality and closeness baked in, these opinions make things harder.#2020-10-0912:56sylvainI've made the first release of [ageneau/keepachangelog "0.1.0"]. This standalone tool automates some release tasks related to keeping a changelog in the https://keepachangelog.com/en/1.0.0/ format very much like https://github.com/dryewo/lein-changelog upon which it is based (all credit to Dmitrii Balakhonskii) but the difference is that it does not depend on lein. The code is at https://github.com/ageneau/keepachangelog#2020-10-1009:54borkdudeClj-kondo v2020.10.10 ✨
New: shadowed var linter and various improvements and fixes
Release notes: https://github.com/borkdude/clj-kondo/blob/master/CHANGELOG.md#v20201010
This release is funded by Clojurists Together.
Discuss in #clj-kondo#2020-10-1113:29borkduderewrite-edn: small utility lib on top of rewrite-cljc to rewrite EDN strings while preserving whitespace, formatting and comments:
https://github.com/borkdude/rewrite-edn#2020-10-1200:38djblueportal 0.6.0 https://github.com/djblue/portal/blob/master/CHANGELOG.md#060---2020-10-11
The main highlights are the new command palette and keyboard shortcuts!#2020-10-1200:41djbluehttps://djblue.github.io/portal/ is also up-to-date with these changes if you wanted to play with the demo#2020-10-1315:48tvaughanI use the emacs nord theme and clojure syntax highlighting doesn't look like portal's (which is much better IMHO). Any idea what it would take to port portal's nord color choices to emacs and clojure mode?#2020-10-1317:24djblue@U0P7ZBZCK I'm not sure how to setup an emacs theme but you can find the colors I used here https://github.com/djblue/portal/blob/master/src/portal/colors.cljc#L5#2020-10-1207:32hkuptyDefteron 0.4.0: https://github.com/hkupty/defteron/releases/tag/v0.4.0
Now handles properly serialization/deserialization of structs and messages. 🙂#2020-10-1218:12Ben Slessclj-decompiler.el - A small Emacs package to decompile JVM Clojure code at point like you would macro expand
https://github.com/bsless/clj-decompiler.el#2020-10-1220:59bartuka😮 thanks!#2020-10-1307:05Reshef Mann@UK0810AQ2 What about vim users? 😉#2020-10-1307:26Ben Sless@U015R6SQ77Z never heard of them 🙃
You're welcome to use the excellent vim implementation available for Emacs. emacs#2020-10-1315:44zcljHi, I have released the first version of my test.check.insights library. It provides functionality to give insights into values generated by test.check generators by providing support for labeling of values, coverage check and value collections. It also provides statistical hypothesis checking of user provided required coverage of values produced by your generators. See the README for more details.
I hope you will find it helpful when writing more complex generators!
https://github.com/zclj/test.check.insights#2020-10-1511:34mihaelkonjevicI’ve just released a functional statecharts library for Clojure and ClojureScript. Documentation is missing at the moment, but there are over 100 tests you can consult to check the functionality. Semantics are based on the SCXML standard https://github.com/retro/state-machete#2020-10-1511:56Lucy WangWhat's your major use case for inventing this lib? I've also created a clj/cljs statecharts library for better state management in re-frame apps and some custom script https://github.com/lucywang000/clj-statecharts#2020-10-1512:02mihaelkonjevic@UP90Q48J3 I didn’t know about your lib, I’ll definitely check your implementation! As for the usecase, I’ve started working on it last year as part of the research for https://github.com/keechma/keechma-next (In the end I’ve went with a different approach for keechma/next), but I’ve never finished it.
I’m starting some work on a backend system that needs to have a pretty flexible business logic, so I’m planning to use statecharts + https://github.com/agentbellnorm/dativity (or an approach similar to it) to implement it.#2020-10-1512:05mihaelkonjevicI wanted to implement statecharts as a pure function without internal state to ensure I can use it in any context I need (and provide my own persistence on top of it). This was inspired by the https://github.com/cark/cark.behavior-tree library#2020-10-1512:05Lucy WangCool. You could also take a look the most popular js statecharts lib xstate (if not yet) https://github.com/davidkpiano/xstate , my lib borrowed most of the design from it.#2020-10-1512:07mihaelkonjevicYeah, I’ve used XState previously and it’s a great library, but in the end I went with an implementation that’s closer to the SCXML standard because SCION project has a great test suite (https://gitlab.com/scion-scxml/test-framework) which I was able to port, and it ensured that the algorithm is correct for more complex transitions#2020-10-1512:28Lucy WangGreat to know these projects like dativity, lots of food for thought!
> implementation that’s closer to the SCXML standard because SCION project has a great test suite
XState doesn't use scxml-like syntax but this doesn't prevent it to https://github.com/davidkpiano/xstate/blob/3dcf91861964f0e3c581b08fcb3357f658b75bea/packages/core/test/scxml.test.ts.
My lib doesn't put conforming to SCXML as a top priority, but focus mostly on what I need in real world projects.
For example I need delayed transitions, eventless transitions (transient states), first-class re-frame integration, so I implemented these features. OTOH so far I don't see any need for history states, so I just leave it out.#2020-10-1512:34Lucy WangJust created the #statecharts channel so people interested could talk there#2020-10-1512:38p-himikThe re-frame integration looks really interesting, especially the epoch support. Thanks!#2020-10-1514:09schmeereally interesting links in here, thanks for the inspo! :thumbsup:#2020-10-1521:32Alex Miller (Clojure team)Clojure tools 1.10.1.716 is now available:
• Make edn reading tolerant of unknown tagged literals
• Update to latest dependencies for maven-resolver and aws-api#2020-10-1618:21dharriganHi! My first time! I'm very pleased to announce that an updated sentry-clj is available for those who use Sentry for application monitoring. It brings the library up to date with the latest Java version (3.1.0). I hope people may find it useful. Clojars here: https://clojars.org/io.sentry/sentry-clj and the github repo here: https://github.com/getsentry/sentry-clj. Enjoy!#2020-10-1619:55borkdudeHey, we've been using that for a long time in our app at work. Do you work for Sentry?#2020-10-1619:55dharriganNope. No affiliation with them, apart from a user of their software#2020-10-1619:55borkdudeCongrats with the release either way#2020-10-1619:56dharriganThank you 🙂#2020-10-1709:33pezI am thrilled to announce that we have a new version of Calva out, v2.0.127, in which @stefan.van.den.oord has added support for Microsoft LiveShare. Meaning you can now work together (pair or mob programming, or whatever you fancy) on the same Clojure code files a bit Google Docs style. The host can share their REPL port and the guests and host can evaluate things towards the same app in this party mode. (It can get a bit weird though, as it is sometimes a bit of a mindfuck to figure out which app is actually evaluating things in this shared scenario. Think about a ClojureScript web app where the host has shared both the REPL and the web server ports. 😀) Read more about the LiveShare support in the Calva documentation https://calva.io/live-share/ Of course you are always welcome to the #calva channel to get further help in getting started.#2020-10-1821:31uochanJust released vim-iced ver 2.4.0, Clojure Interactive Development Environment for Vim8/Neovim.
https://github.com/liquidz/vim-iced
Now you can start and connect shadow-cljs REPL more easily.
https://liquidz.github.io/vim-iced/#clojurescript_shadow_cljs#2020-10-1906:01ikitommi[metosin/malli "0.2.0"] & [metosin/reitit "0.5.9"] are out!
Malli is a new data-driven data validation and specification library for Clojure/Script. This version adds the following:
• improved handling of schema references: conditional walking, generators, JSON and Swagger Schemas
• BREAKING (MINOR): map-utilities in malli.util automatically deref the top-level schemas
• optional schema transformation schemas: :merge, :union and :select-keys
• new options for explicitly configuring or disabling sci
• support microsecond precision when parsing datetime strings
• OpenAPI 3.0.3 https://spec.openapis.org/oas/v3.0.3#models-with-polymorphism-support in http://malli.io (click Pet)
Reitit is a fast data-driven routing library for Clojure/Script. Few small fixes and support for the non-alpha malli.
• Discussion in #malli & #reitit
https://github.com/metosin/malli
https://github.com/metosin/reitit#2020-10-1908:49borkdudebabashka/process: https://github.com/babashka/process
A wrapper for java.lang.ProcessBuilder. This library can be used from the JVM and later this week there will probably be a new babashka release including the lib.#2020-10-1910:04borkdude#2020-10-1920:10Jakub Holý (HolyJak)Cool! I struggle somewhat with when I would want to use pipeline but I guess I will get it when I actually use the library.
BTS isn't there a typo in: "The pipeline function returns a sequential of processes " -> sequence?#2020-10-1920:21borkdudea sequential is something which returns true for sequential?#2020-10-1920:21borkdudeUsually you will just use -> to pipe processes but in some cases this doesn't work well due to buffering, this is when you will use pipeline, it's probably a niche use case#2020-10-1918:29seancorfieldseancorfield/next.jdbc {:mvn/version "1.1.610"} -- https://github.com/seancorfield/next-jdbc/releases/tag/v1.1.610 -- supports duckdb; allows for more control over result set processing; improves compatibility with HoneySQL -- follow-up in #sql#2020-10-2017:10kennytiltonThe pure Matrix/JS Hacker News “Who’s Hiring” project https://kennytilton.github.io/whoishiring/ has now been ported to Matrix/CLJS https://kennytilton.github.io/whoshiring/index.html and will by month’s end replace the former in the AskHN monthly question links. Yay CLJS. While I was at it I added preserving search settings between sessions. More info soon over in #matrix.#2020-10-2114:00AndrosGlosa upgrades to 1.3.0 with private endpoints and paves the way for an administrative panel https://github.com/glosa/glosa-server#2020-10-2116:12greglookHappy to announce lein-monolith 1.6.1 with a handful of new features and some long-standing bug fixes! Significant changes include:
• The each task supports a new :silent option, which will suppress task output for successful projects. This can be useful in large CI builds where the output is only consulted in the event of failure.
• The each task is now compatible with composite profiles.
• When each is used with :parallel, task aliases are now correctly resolved before iteration starts.
• The monolith settings can now use :inherit-raw and :inherit-leaky-raw for attributes which should be inherited without interpretation (like paths).
• The unlink task will now only remove internal checkouts by default.
https://github.com/amperity/lein-monolith#2020-10-2119:43borkdudebabashka v0.2.3 released!
Release notes: https://github.com/borkdude/babashka/blob/master/CHANGELOG.md#v023-2020-10-21
Featuring babashka/process: a new Clojure library around dealing with java.lang.Process and many other additions and fixes.
Come chat in #babashka to learn more.#2020-10-2214:12Alex Miller (Clojure team)Clojure tools (clj) https://clojure.org/releases/tools#v1.10.1.727 is now available:
• Fix clj -X:deps tree adding tools.deps.alpha to tree
• Fix clj -X:deps mvn-pom adding tools.deps.alpha to pom deps
• Fix clj -X:deps git-resolve-tags not working
• https://clojure.atlassian.net/browse/TDEPS-152 - Fix clj -X:deps mvn-install on jar to also install embedded pom
• Fix clj -Spom not respecting dep modifications from -A (regression)#2020-10-2215:30heliosHappy to announce the release of Lazo: https://github.com/nextjournal/lazo
This is how we at Nextjournal keep our open source repositories in sync with our main repo. Interested in the feedback you might have.#2020-10-2216:54dominicmWhy this rather than a subtree? (Not a submodule)#2020-10-2218:35heliosThe main idea is to streamline the flow for the monorepo and ourselves. So, from a practical point of view our main repo is completely oblivious to the fact that there are other repositories out there, so nothing has to change internally#2020-10-2218:43Lennart BuitThe real question here is whether lazo is being opensourced from that monorepo with lazo :p#2020-10-2218:45dominicmOther than doing the push, isn't that what a subtree does?#2020-10-2308:34acronSubtrees are harder to retrofit#2020-10-2313:53athomasoriginalI was looking for a project like this for one of my monorepos. Thanks!!#2020-10-2217:05slipsethttps://github.com/slipset/deps-deploy is now available in version 0.1.3,
Thanks to @cch1 who nudged me to finally fix signing artifacts.#2020-10-2222:11bringehttps://github.com/BetterThanTomorrow/calva version 2.0.129 is out with improved stack traces in the (relatively) new output/repl window! Visual demo in the docs: https://calva.io/output/#stack-traces. Join us in #calva for feedback, help, or to chat!
• Stack traces now more closely resemble the output of `clojure.repl/pst` .
• You can ctrl+click (cmd+click on Mac) the file names in the stack trace to navigate to the respective line (for Clojure files).
• You can hover over symbol names in the stack trace to see the symbol documentation, as in normal code files.
• You can ctrl-click (cmd+click on Mac) the symbols to Peek Definition, as in normal code files.#2020-10-2222:54just.sultanovHi, everyone! A Clojure(Script) library for unified responses v1.0.0 has been released with a stabilized API and some extra helper functions and macros.
Happy hacking!
https://github.com/anywhere-ninja/unifier#2020-10-2321:26javahippieclj-test-containers version 0.3.0 is out! If you are on a Mac, you should update, as it resolves an issue with the latest Docker version on Mac!
* Clojars: https://clojars.org/clj-test-containers
* Changelog: https://cljdoc.org/d/clj-test-containers/clj-test-containers/0.3.0/doc/changelog
* GitHub: https://github.com/javahippie/clj-test-containers#2020-10-2516:42simongrayhttps://github.com/simongray/clj-graph-resources
This is a curated list of mostly mature and/or actively developed Clojure resources relevant for dealing with graph-like data. It’s currently being expanded as I explore this area more thoroughly. Suggestions are welcome in the form of pull requests or Github issues. I try to steer around abandonware, though.#2020-10-2617:30plexusClojure + Minecraft = Witchcraft 😄 this is extremely rough and alpha but we're allowed to have some fun right. This uses an open source minecraft server (Glowstone) which makes it a much more straightforward approach than other Clojure/Minecraft attempts I've seen. https://twitter.com/plexus/status/1320778992232943617#2020-10-2617:31plexusI should note that you do need a minecraft account/license. Not sure how much they are these days.#2020-10-2619:04dominicmThat's the sponge derivative right? Interesting.#2020-10-2619:04dominicmI've been meaning to check out how well fabric and clojure go together.#2020-10-2620:16plexusI am still utterly confused about all the different minecraft projects and how they connect... The main thing I know is that this is a standalone server written from scratch, whereas most projects start from the official server then do all kinds of classpath shenanigans to mod it. It does use a bukkit/paper fork as a foundation, as far as I understand this makes sure it can work with existing plugins.#2020-10-2620:18plexusIt's a small project, not a ton of manpower so they're running behind a bit in terms of server version compatibility, which means you don't get the latest new block types and such, but works great if you stick to the right version.#2020-10-2621:23dominicmGlowstone is independent of sponge#2020-10-2710:00Jarda PernicaHi there! I have started small project to mimic re-frame architecture in js with Preact called pre-frame. It has similar API, yet covers the main functionality (signal graph, interceptors, coeffects), and is ultra small (1.5kB min gzip). https://github.com/PanJarda/pre-frame.#2020-10-2713:55Alex Miller (Clojure team)tools.deps.graph 1.0.56 is now available, just updates to latest tools.deps.alpha and makes available -X style execution with updated docs at https://github.com/clojure/tools.deps.graph/blob/master/README.md#2020-10-2714:15wilkerluciousing latest clj (from homebrew) I get Unqualified function can't be resolved: graph, seems like :default-ns clojure.tools.deps.graph is not available in this version#2020-10-2714:16wilkerlucioother minor thing, also got warning to replace :deps with :replace-deps#2020-10-2714:18Alex Miller (Clojure team)shoot, it's :ns-default#2020-10-2714:20wilkerluciohttps://github.com/clojure/tools.deps.graph/pull/7/files#2020-10-2714:20Alex Miller (Clojure team)fixed#2020-10-2714:20Alex Miller (Clojure team)sorry, we don't do PRs in contrib libs#2020-10-2714:21wilkerlucioah, no worries, closed, thanks for the fix 👍#2020-10-2910:42practicalli-johnExcellent tool. I've added it to https://github.com/practicalli/clojure-deps-edn#project-dependencies#2020-10-2722:57mauricio.szaboJust published Chlorine for Atom version 0.10.0. In this new release, I added the ability to query some Clojure metadata/vars using EQL. This does not mean that much for now, but it opens some possibilities with static analysis. So, in this version, doc-for-var and goto-var-definition are now using clj-kondo (if it's present on the PATH) if the editor is not connected to any REPL - so you have some functionality without the need of a connection. Discussions on #chlorine channel 🙂#2020-10-2816:50borkdudeGrasp: search code using clojure specs!
https://github.com/borkdude/grasp#2020-10-2816:52telekidWHOA. This is such a cool idea.#2020-10-2817:32uwowhoa#2020-10-2818:26metasoarous@U04V15CAJ over here dropping fresh repos like woah!#2020-10-2819:43Ivansuper nice; this can be extended to do cool things 🙂 thanks!#2020-10-2918:54rgmthis is amazing; brb figuring out how to wrap this in a vim plugin.#2020-10-2920:18uwo@U08BW7V1V link it if you do, vimmer!#2020-10-3121:27borkdudeThere's also a binary available now:
https://github.com/borkdude/grasp#binary#2020-10-3005:21Alex Miller (Clojure team)FYI, https://ask.clojure.org is in maintenance mode right now as I sort through some updates, should be back on tomorrow. sorry for the inconvenience#2020-10-3015:00Alex Miller (Clojure team)all fixed up, ask away!#2020-10-3013:51rutledgepaulvHi all, Piped is a new library for processing messages from Amazon's Simple Queue Service (SQS). It makes use of aws-api and core.async to implement a message processing machine with easy-to-implement hooks for user space code. Feedback and issue reports are certainly welcome as it's quite young.
Find it at https://github.com/RutledgePaulV/piped.
Main Features:
- lightweight (no amazonica!)
- graceful shutdown sequence
- automatic lease extensions
- batches calls to aws for receiving and acking
- decent performance (still need to benchmark others though)
- supports blocking and non-blocking consumers#2020-10-3017:41dominicmLooks like the core.async aspect is fully internal, I like it!#2020-10-3017:45rutledgepaulvyep, no need to use core.async as a user! but optionally you can return a channel from a handler with a result of :ack or :nack.. I should document that part 🙂#2020-11-0216:22Alex Miller (Clojure team)Clojure 1.10.2-alpha3 is now available
• https://clojure.atlassian.net/browse/CLJ-2492 Remove uses of deprecated Class.newInstance()
• https://clojure.atlassian.net/browse/CLJ-2534 Fix javadoc urls for JDK 11+
• https://clojure.atlassian.net/browse/CLJ-1364 vector-of does not implement equals or hashing methods
• https://clojure.atlassian.net/browse/CLJ-2549 vector-of does not implement IObj for metadata
• https://clojure.atlassian.net/browse/CLJ-1187 quoted metadata on empty literal colls is lost#2020-11-0316:24blueberryNew release 0.11.0! Linear Algebra for Programmers: An Interactive Tutorial with GPU, CUDA, OpenCL, Java, and Clojure theory
• fast code
• interactive: each line answers immediately
• Read now at:
https://aiprobook.com/numerical-linear-algebra-for-programmers#2020-11-0321:49danielcomptonClojurists Together wants to fund you to work on your Clojure project. More details at https://www.clojuriststogether.org/news/q3-2020-survey-results/. We're funding 4 project $9k each over 3 months. You could be one of the lucky projects!#2020-11-0412:40LuFinally had some time to add more functionality to arco v0.3.3 , a time-ago time-to lib with lots of customizability options plus reagent friendly 🙂.
https://github.com/luciodale/arco#2020-11-0419:43Adam HelinsFinally! Now you can handle any binary format / protocol your heart desires in a cross-platform fashion: https://github.com/helins-io/binf.cljc
Needing to handle MIDI stuff, I realized the current Clojure tooling was insufficient for such a common thing. It was a call for building a quite extensive library for all sorts of binary purposes and I hope you'll enjoy it.
Currently in beta while awaiting feedback but the API is stable and already used in production.#2020-11-0420:43schmeecool! just a heads up: link to the full api in the readme is broken (https://cljdoc.org/d/helins-io/binf.cljc)#2020-11-1300:40didibusLooks neat#2020-11-0518:49Alex Miller (Clojure team)Clojure https://clojure.org/releases/devchangelog#v1.10.2-alpha4 is now available
• https://clojure.atlassian.net/browse/CLJ-2587 Fix reflection warning in gvec from CLJ-1364#2020-11-0622:11mauricio.szaboJust published Clover version 0.2.1 in VSCode marketplace and on Open VSX. Clover is a socket-REPL package for VSCode, VSCodium, Gitpod and Eclipse Theia (tested on all these platforms) that's a port of Chlorine (for Atom).
On this version, custom commands are enabled! So you can use the same API that you use on Atom (in ClojureScript) to define new commands on VSCodium (they will all be available as Tasks under the folder Clover). More info on the README: https://github.com/mauricioszabo/clover#custom-commands
Discussions, for now, on #chlorine channel#2020-11-1300:37didibusWow neat. Even Eclipse Thea, interesting haha#2020-11-1315:40mauricio.szaboTo be honest, I just found that Theia does not have some APIS that I use on Clover, so custom commands will not work at all. But yet, the "regular stuff" should work fine#2020-11-0706:37metasoarousFor those of your impatiently twiddling your thumbs over the 2020 US Presidential Election results, I put together a little visualization project with ClojureScript and Oz (Vega-Lite). Please check it out, and feel free to contribute if you're inspired. Thanks!
https://2020-election-results.surge.sh/#2020-11-0712:26borkdudeClj-kondo v2020.11.07 ✨
New:
- deps.edn linting
- import configs from deps
- skip over already linted .jar files
and more!
Release notes: https://github.com/borkdude/clj-kondo/blob/master/CHANGELOG.md#v20201107
This release is funded by @cljtogether!
Come chat in #clj-kondo if you have questions.#2020-11-0800:09Sam RitchieHey all, a full release of #sicmutils is on its way, but I wanted to share a fully fleshed out Clojure(script) implementation of Power Series that I've just pushed, built with all the beauty of Clojure's lazy sequences: https://github.com/littleredcomputer/sicmutils/blob/master/src/sicmutils/series/impl.cljc
I wrote it in literate programming style, so I'm sharing it in case anyone here's power-curious and wants to see how to do all sorts of arithmetic operations on infinite series (so wild). This is a port (and slight extension of) Doug McIlroy's functional pearl, "Power Series, Power Serious" http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.333.3156&rep=rep1&type=pdf
For context, this fits into the SICMUtils project as one of the backbone-required-types for a computer algebra system that can run in the browser. The API that wraps it, and makes the series implement IFn etc, lives here: https://github.com/littleredcomputer/sicmutils/blob/master/src/sicmutils/series.cljc
Feedback welcome, and I'd love to hear if this is interesting! (Again, larger release on the way, but this is a fun read on its own.)#2020-11-0816:32Gleb PosobinThis is very cool! I went through the first chapter of sicm last year, but in scheme. Great to see this library ported to clojure, I'll use it if I try going through the rest of the book. Anything you need help with?#2020-11-0919:41Sam RitchieHi @UQ4RJ22EA! that's awesome, would love your feedback. That's a good Q - it depends on what you're interested in. The bigger aim I've got is integration into Maria.cloud, a vision I describe here: https://roadtoreality.substack.com/p/the-dynamic-notebook#2020-11-0919:42Sam Ritchieso one answer is, there are lots of pieces of the library that I've found really rewarding to work on. if you have a hunger to learn about functional numerics in Clojure, I can help you navigate , and there is a LOT to port from scmutils (not used by the book but very cool) that would be awesome. reverse mode automatic differentiation would be another I'd love help on#2020-11-0919:43Sam Ritchieanother answer is, I had completed many of the exercises for the project in scheme, and plan on porting them to Clojure, and then putting them into Maria: https://github.com/sritchie/sicm#2020-11-0919:43Sam Ritchieso that would be great. But this is only a good answer if you're interested in the guts of the library, or going farther with the book!#2020-11-0919:44Sam Ritchielmk if you do any more of the book, and would love feedback on the Clojure port if you do try it. Thanks again!#2020-11-0816:10practicalli-johnhttps://github.com/practicalli/clojure-deps-edn monthly library update
• added `:community/zulip-event to create events on the Clojurians Zulip community, which are automatically added to a global ical of events.#2020-11-0912:36henryw374Hi all, I made a drop-in-replacement for clojure.core/atom which records 'count of updates' and 'count of attempts to update' - ie it can be used to get an idea how much your threads are clashing: https://gist.github.com/henryw374/3627fb85be5cd909801b405b995428df . Ofc it adds some overhead of its own vs clojure.core/atom
depend on it from deps:
com.widdindustries/stats-atom {:git/url ""
:sha "f35fb32cfa6d4d0781c1c03983f9589cb04cbe4f"}
any feedback welcome#2020-11-0915:18katoxPGMIG 0.5.0 is out ✨
New:
• Support native-image programmatic migrations via https://github.com/borkdude/sci
• Add cli option for the migration format: sql (default), clj, edn
• Support EDN migrations (uberjar only)
• Print version command
Release notes: https://github.com/leafclick/pgmig/blob/master/CHANGELOG.md
This release you can even grab pre-built binaries for Linux/Mac/Windows here: https://github.com/leafclick/pgmig/releases/tag/v0.5.0
Shout out to @borkdude for SCI!#2020-11-0916:44littleliZdravím Kamile 👋 I enlisted Windows binary of pgmig in scoop-clojure bucket there among other great tools built using Clojure and Graalvm's native-image.
https://github.com/littleli/scoop-clojure
PR https://github.com/littleli/scoop-clojure/pull/127
Every scoop installer user on Windows can now easily install pgmig with convenience of single command:
scoop install pgmig
I hope someone finds it useful.
Cheers :flag-cz: simple_smile#2020-11-0918:01greglookAfter a bit of a hiatus, a new version of cljstyle is available! Version 0.14.0 fixes a few bugs, revamps the configuration file format, and offers a 2.3x speedup over the previous version. gotta_go_fast Pre-built binaries are available on GitHub, or can be installed via Homebrew.
https://github.com/greglook/cljstyle/releases/tag/0.14.0#2020-11-0918:23Jacob O'BryantI have recently finished some major updates to https://findka.com/biff, a full-stack web framework:
• Tight (but optional) integration with Terraform. Deployment is now just "set some config variables, run a few commands". I'm trying to achieve a firebase/heroku-like experience but without being tied to a particular platform.
• Project templates for single-page and multi-page apps: run bash <(curl -s ) to get started.
• Simplified code structure. It's easier to understand now.
• Various cleanup/small improvements, e.g. moved from immutant to jetty.
• And I've kept all the documentation up-to-date. (Check out the new https://findka.com/biff/#overview section).
To help Biff grow, I've been considering giving free one-on-one mentoring to people who want to learn web dev in Clojure (with Biff), as my schedule allows. Fill out this quick survey if you're interested: https://airtable.com/shrKqm1iT3UWySuxe.
There's also a #biff channel by the way.#2020-11-1114:34Louis KottmannThe documentation looks really good#2020-11-1008:02Ertugrul CetinHi all, I created a leiningen plugin that checks that order of namespace declarations for Clojure and ClojureScript
• Checks that namespaces/packages inside :require and :import are sorted.
• There are pre-defined sorting functions (asc, desc, etc.). Also, you could define your custom sorting function.
• Automatically replacing namespace declarations in source files, so no need for a manual update.
https://github.com/ertugrulcetin/lein-nsort#2020-11-1119:21Noah Bogartthis is cool! should I post feedback here or in a github issue?#2020-11-1714:46Ertugrul Cetin@UEENNMX0T sorry for the late reply, GitHub issues would be great!#2020-11-1714:47Noah Bogartcool, will do#2020-11-1113:49vlaaadreveal New version of #reveal — https://vlaaad.github.io/reveal — is out!
Since previous announcement Reveal gained some valuable UX improvements, such as:
• natural structural navigation that makes value inspection similar to browsing tables — see added https://vlaaad.github.io/reveal/#structural-navigation;
• better keyboard support for table views — see updated https://vlaaad.github.io/reveal/#table-view.#2020-11-1116:10darwinHi, I have just updated cljs-react-three-fiber examples[1]
It uses three.js and react-three-fiber to render simple 3d demos[2]. The interesting part is that it shows how to integrate with non-trivial npm packages (thanks to shadow-cljs), it uses latest react via helix, with cljs-bean and custom wrapper functions we can write pretty idiomatic cljs code and it gets optimized by closure compiler and split into modules automagically. e.g. the physics demo module includes cannon physics library or the gltf loading demo modules includes gltf libraries (run ./scripts/report.sh to see the results).
[1] https://github.com/binaryage/cljs-react-three-fiber
[2] https://github.com/pmndrs/react-three-fiber#2020-11-1207:13NazralHi, I would like to share https://github.com/Tyruiop/needle a small tracing/profiling library that I made that uses the neat frontend provided by .
It acts as a drop in replacement for both defn and fn and I mainly use it at work/on personal projects to keep track of the value of my functions' arguments/output and/or look for bottlenecks in my code. It has been quite helpful for me so far in helping me debug and improve performance of my code.#2020-11-1316:24tiensonqinLogseq's frontend code is open-source now:
https://github.com/logseq/logseq#2020-11-1316:26dharriganJust hit the home page out of curosity, renders blank, throws an exception#2020-11-1316:26dharriganObject { message: "Attribute :block/page should be marked as :db/index true", data: {…}, ph: null, name: "Error", description#2020-11-1316:28tiensonqinThanks, let me check!#2020-11-1316:30borkdudeSame here#2020-11-1316:31tiensonqin@U04V15CAJ oops ...#2020-11-1316:31borkdudeao {message: "Attribute :block/page should be marked as :db/index true", data: $…P.k, ph: null, name: "Error", description: undefined, …}
columnNumber: undefined
data: $APP.k {meta: null, T: 3, J: Array(6), D: null, B: 16647951, …}
description: undefined
fileName: undefined
lineNumber: undefined
message: "Attribute :block/page should be marked as :db/index true"
name: "Error"
number: undefined
ph: null
stack: "Error: Attribute :block/page should be marked as :db/index true↵ at new ao ( at Function.Bp.l ( at Function.Bp.j ( at SC.h.mj ( at yD ( at oI ( at at Function.NP.o ( at NP ( at vQ ()"
__proto__: Error
#2020-11-1316:32tiensonqin@U04V15CAJ oh @U11EL3P9U just told me that it works on chrome but failed on firefox.#2020-11-1316:32borkdudeI'm on chrome#2020-11-1316:32dharriganinteresting!#2020-11-1316:32borkdudeFor me it works on Firefox though :)#2020-11-1316:32tiensonqinIt might be a datascript version issue#2020-11-1316:33dharriganha! i'm the opposite - works on chrome, but not firefox#2020-11-1316:33tiensonqinquite interesting now!#2020-11-1316:34dharriganworks on safari#2020-11-1317:18borkdudeDelete localstorage and indexeddb#2020-11-1317:18borkdudeThat made it work for me#2020-11-1317:19tiensonqin:thumbsup:#2020-11-1518:12rymndhngHey all, a new version of https://github.com/dakrone/clj-http is available with maintenance fixes and bugs.
See https://github.com/dakrone/clj-http/blob/3.x/changelog.org#3110 for more details!#2020-11-1613:54ingesolAnnouncing https://github.com/ingesolvoll/glimt, a simple FSM wrapper around re-frame’s `:http-xhrio` effect with retries and error handling. State of request is tracked through a simple subscription instead of callback/dispatch. Code example:
(def fsm {:id :customer-loader
:http-xhrio {:uri ""
:method :get
:response-format (ajax/json-response-format {:keywords? true})}
:max-retries 5
:path [::customers 123]})
#2020-11-1622:12genekimI’m excited to read about Skija, the new JVM bindings to Skia (at the heart of Chrome, Android, Flutter, etc.), written by @tonsky, funded by JetBrains. https://github.com/JetBrains/skija/
Tonsky writes about his desktop for the JVM vision here: https://tonsky.me/blog/skija/. (Which I’ll summarize by saying, “can we have Electron for the JVM, but better?“)
JetBrains funded this, which I believe builds upon Skija: https://www.jetbrains.com/lp/compose/ (“Fast reactive desktop UIs for Kotlin, based on Google’s https://developer.android.com/jetpack/compose and brought to you by JetBrains”, forked from Android Compose.)#2020-11-1622:17genekimAnd one more JetBrains project: Skiko windowing manager — higher level than Sijja, but lower level than Compose for Desktop: https://github.com/JetBrains/skiko/
Scanning this to see how easy it would be to use with Clojure. :)#2020-11-1622:22borkdudeExciting! I will await skijacl by @U47G49KHQ ;)#2020-11-1622:38vlaaadif only they released it a couple of years earlier...#2020-11-1700:18JAtkinsI love this#2020-11-1700:19JAtkinsI have been in a bind between electron and jfx, this possibly solves that issue#2020-11-1702:21mruzekwAre there any talks of extending to mobile as well?#2020-11-1702:24phronmophobicit seems like at least android is mentioned. skia (the library skija wraps) can compile for just about any target (I'm pretty sure).#2020-11-1710:49borkdude@U6VPZS1EK https://github.com/JetBrains/skija/blob/master/examples/clojure/src/lwjgl/main.clj#2020-11-1719:11genekim@U04V15CAJ I saw that! Very exciting to see!!#2020-11-2120:42bruno.bonacciAnother set of high-quality Clojure liraries for 2D & 3D graphics are available at:
https://thi.ng/ by Karsten Schmidt
There are over 100 libraries for pretty much everything: from computational geomentry, to 3D rendering, to color management, math, generative art, ray tracing and 3d printing..#2020-11-2203:15jimmySuper excited about the potential of this. :)
Has anyone got this working with nrepl? I’ve tried a few things but actually get jvm crashes when attempting to make it work.#2020-11-2413:40synthomatI really appreciate that the compose-jb project has some screenshots of the examples so that I don’t have to run the code myself 🙂#2020-11-2222:48mihaelkonjevicI’ve just released Penkala - a composable query builder for PostgreSQL. I’m still working on the docs and the tests, but I’d like to get your feedback https://github.com/retro/penkala#2020-11-2418:08Alex Miller (Clojure team)A new version of the Clojure tools is now available - https://clojure.org/releases/tools#v1.10.1.739
• Fix use of jdk profile activation in local deps with pom files
• Fix error handling for -X to avoid double throw
• Add error handling for -A used without an alias
• Use tools.deps.alpha 0.9.840#2020-11-2611:19oliy:camera_with_flash: kamera 0.1.4 is out 🎊
https://github.com/oliyh/kamera
kamera provides visual testing tools for Clojure with https://github.com/bhauman/figwheel-main and https://github.com/bhauman/devcards integration.
This release changes:
• The method kamera uses to resize chrome to contents. Previously it used those exposed by chrome dev protocol but now evaluates javascript https://github.com/oliyh/kamera/pull/30
This release adds support for:
• Specifying the dom element to resize the browser to https://github.com/oliyh/kamera/pull/30 (thanks https://github.com/jleonard-r7 and https://github.com/johanatan)
• Asserting that there is at least one test https://github.com/oliyh/kamera/issues/25
• deps.edn https://github.com/oliyh/kamera/pull/28 (thanks https://github.com/johanatan)
• The dssim algorithm https://github.com/oliyh/kamera/pull/33 (thanks https://github.com/johanatan and https://github.com/jleonard-r7)
This release improves:
• The `element-exists?` predicate is now more forgiving https://github.com/oliyh/kamera/issues/27
#2020-12-1808:19Teemu KaukorantaMay I ask how you came up with the name? 😄#2020-12-1817:19oliyMy wife is half Finnish, and kamera is much more googleable than camera :)#2020-11-2708:58borkdudeBabashka 0.2.4 released!
Featuring an all new pREPL implementation which is used by NextJournal to build a babashka notebook environment:
http://nextjournal.com/try/babashka?cm6=1
See changelogs for more details:
https://github.com/borkdude/babashka/blob/master/CHANGELOG.md#v024#2020-11-2723:16uochanJust released antq ver 0.9.0, Tool to point out your outdated dependencies.
https://github.com/liquidz/antq
Supports upgrading outdated dependencies (excepting YAML) finally!#2020-11-2820:28tony.kayI’m pleased to announce a few minor releases and patches for the Fulcro ecosystem:
Fulcro 3.4.5 - Minor bug fixes, primarily around CLJC usage
Semantic UI Wrappers 2.0.2 - Update for wrappers around the latest React Semantic UI. (WARNING: follows break versioning, the underlying js lib removed some features)
The Fulcro RAD Demo and Fulcro template were also updated to use more recent versions.
https://github.com/fulcrologic/fulcro
https://github.com/fulcrologic/semantic-ui-wrapper
https://github.com/fulcrologic/fulcro-rad-demo
https://github.com/fulcrologic/fulcro-template#2020-11-2902:31st3fanI wrote another GitHub bot in Clojure … https://github.com/apps/devbots-vacation#2020-11-3014:34tengstrandThe Polylith team has just released a big update to the Polylith architecture. Now it's even simpler to grow software out of composable LEGO-like building blocks:
http://polylith.gitbook.io#2020-11-3014:57athomasoriginalThis is really interesting! Thank you for sharing 🙂#2020-11-3015:49jmayaalvis there a changelog ? or a place to check what’s new ?#2020-12-0109:09jamesThere’s no official changelog, but it’s probably a good idea to add that.#2020-12-0109:10jamesHere’s how I summarised the changes on the HackerNews thread:#2020-12-0109:12tengstrandYou can find a more detailed list in the migration instruction: https://github.com/tengstrand/lein-polylith/blob/master/migrate/migrate.md#2020-12-0208:19jmayaalvVery nice, Thank you! :)#2020-12-0108:37Jakub Holý (HolyJak)Introducing v0 of https://github.com/holyjak/clj_tumblr_summarizer/, a CLI tool that can currently fetch and store into files new posts from a Tumblr blog. Eventually this will evolve into a scheduled Lambda that will back up the posts and produce a monthly summary of the new ones to publish on a blog. Also a hobby project to learn more about core.async and Datomic.#2020-12-0115:30plexusThe first release of lambdaisland/fetch is out, a lightweight wrapper around JavaScript's fetch API https://github.com/lambdaisland/fetch/#2020-12-0115:49chrisnFirst release of https://github.com/cnuernber/libjulia-clj 🙂. So you can Julia in your Clojure and (soon) Clojure in your Julia.
I just barely have enough working to talk about but I do have it provably working across 2.5 operating systems, according to Travis 🙂.
Julia sits kind of at the pinnacle of the numerics stack. It is a generalized very high performance language specifically designed to make mathematical and scientific computing clearer, more enjoyable, and more correct. In the techascent stack, it sits just after something like Smile's BLAS binding but just before TVM. Unlike a specific blas binding, you can write bespoke code in Julia and it is highly optimized for you. Unlike TVM, the language is Turing complete.
Julia has the best solvers known to computer science and it has a fully differentiable computing stack. I think it points the way forward in terms of dense and sparse style numeric computing. It has great metaprogramming capabilities and a community of extremely capable people pushing it forward.
Pairing Julia tightly with Clojure allows us to use their vast libraries of scientific computing and gives us an avenue to take advantage of truly cutting edge numeric research directly. I would like Julia people to enjoy using Clojure and vice versa.
This is absolutely a hair-on-fire early release. I put this forward in order to just let everyone know it is concretely possible and to open the door for people who may be interested in helping out.#2020-12-0122:55Chris McCormickHey all! Today I'm releasing PO LoopSync, an niche Android app for playing audio loops sync'ed to Teenage Engineering's Pocket Operator devices. I built it with ClojureScript & browser tech (using Cordova, Reagent, webaudio, and shadow-cljs). I was particularly surprised/excited to be able to squeeze all this audio processing functionality & UI out of just 427 lines of ClojureScript code. 🤓
https://twitter.com/mccrmx/status/1333899214649053184#2020-12-0218:58Thomas TayCool! I've been looking into making apps too, would you say that there were any perf issues with Cordova that you had to lookout for, given you're doing audio work?#2020-12-0222:19aviSuper cool!
I totally understand if not, but is there any chance it’s open source, or you might consider giving me a peek at it? I’m super curious about building iOS/Android apps with Clojure, and I’m not up to date with the state of the art there. No worries if not. Thanks!#2020-12-0223:10Chris McCormick@U01E5ARK4AF there are performance issues in general doing audio in the browser, yes. I was able to get away with webaudio because the playback is very static (loops) so once the playback is queued up it basically just continues without a problem. When the user makes a change like muting a loop or volume change, I have to update the mix and I do this on an async thread so it doesn't interrupt the main playback. I am looking at ways to improve this using webaudio. An issue with Cordova is it uses whatever webview is in the OS, so if they have an old phone the webaudio implementation might require workarounds. One small upside of this is the binaries are tiny - my app is a couple of megabytes for example. People seem to value this.#2020-12-0223:12Chris McCormick@U69US348Z I will open source it at some stage but I am not ready yet. You've given me a good idea though. I will put together a boilerplate/tutorial for building native apps with ClojureScript using Electron and Cordova and post it here. Thanks for your interest!#2020-12-0223:47avi@UUSQUGUF3 that’d be fantastic — I’m looking forward to it! Please let me know if you could use a beta reader for feedback, I’d be happy to help.#2020-12-0300:15Thomas TayWould equally appreciate that, if you do post it tag me!#2020-12-0300:16Thomas TayIronic that web view binaries are small on mobile, while Electron is always (unfairly) criticized for being bloated#2020-12-0300:57Chris McCormickThanks, will do!#2020-12-0217:51RollACasterThis is the thing I wish I had when I started to work with ClojureScript + D3 📊. There is still a lot of work to be done, but maybe it is already useful for someone 🙂
https://github.com/rollacaster/hiccup-d3#2020-12-0518:10practicalli-johnPracticalli Clojure user level configuration with a wide range of communty tools for Clojure CLI (deps.edn) projects
Monthly library version update via :project/outdated which uses antq. The library version changes are documented in the change.log.
Notable change: Kaocha updated as issue with optional test.check library resolved
https://github.com/practicalli/clojure-deps-edn/#2020-12-0611:54bozhidarI wrote an article on the merits of "Semantic Clojure Formatting" that I hope some of you would find useful https://metaredux.com/posts/2020/12/06/semantic-clojure-formatting.html Btw, the related guidelines in the Clojure style guide have been expanded with more rationale as well (read on from here https://guide.clojure.style/#body-indentation)#2020-12-0613:09borkdudeHi @U051BLM8F. Usually this stuff goes into #news-and-articles as this channel is for project/library announcements only.#2020-12-0615:31bozhidarFirst time I hear of this channel. My bad, deleted.#2020-12-0615:32borkdudeNaming is hard. It's an often made "mistake" that gets often corrected by the admins.#2020-12-0618:15seancorfieldI guess we hope more people would read at least the topic before posting:thinking_face:and maybe the description too...#2020-12-0619:26bozhidarFair enough. 🙂#2020-12-0804:55Alex Miller (Clojure team)A new version of the clojure tools is now available (https://clojure.org/releases/tools#v1.10.1.754)
• New, more informative tree format for clj -Stree / clj -X:deps tree
• Added https://clojure.github.io/tools.deps.alpha/clojure.tools.cli.api-api.html#clojure.tools.cli.api/tree for use with clj -X:deps tree
• Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.9.857#2020-12-0815:00genmebloghttps://github.com/genmeblog/soundsynth Wavetable sound synthesizer. It's a study project which helps me to understand DSP needed to implement similar thing on STM32 chips. It contains minimal path for subtractive synthesis. It works, plays a nice piece, allows live patch changes, consists of: wavetable oscillator, state variable filter, adsr envelopes, wave shaper, phase modulation, sequnecers with bpm timer. Listen to the song generated by it and defined in sound.patch namespace: https://soundcloud.com/tsulej/lost-woods#2020-12-0815:51vemvAce! I'm giving it a spin.
So you foresee giving it support for accepting midi inputs? (I have no idea of how hard that would be).#2020-12-0815:58genmeblogYes, we are (I'm helping my 16yo son with this project) after tests on STM32 and MIDI is quite simple there. You just receive note on/off events with note value and velocity. I don't know yet if add MIDI in Clojure but looks like it's a straightforward java interop.#2020-12-0816:06lukaszOvertone has MIDI support - maybe you can take some inspiration from it: https://github.com/overtone/overtone/blob/master/src/overtone/midi/file.clj#2020-12-0816:07lukaszThis is probably more useful: https://github.com/overtone/overtone/blob/master/src/overtone/midi.clj#2020-12-0816:14genmeblogOh lovely! Thanks.#2020-12-0816:17genmeblogIt's not as easy as I thought.#2020-12-0817:44Ben SlessDSP, that takes me back...#2020-12-0822:55ghadiHopefully you’ve seen Rich’s conj talk about additive synthesis https://youtu.be/bhkdyCPYgLs#2020-12-0909:42plexusThe javax.midi stuff isn't hard to use, just a little tedious because of the amount of classes and interop involved. Here's an example of getting key presses from a midi controller https://gist.github.com/plexus/27dfe6a69cda7ec90dab479d37b7b1cc#file-obs_controller-clj this uses a defwrapper macro to sweeten doing interop, I posted that also on ClojureVerse a while ago and someone ran with it and turned it into a library: https://github.com/emlyn/tortilla#2020-12-0909:43plexusSorry I don't have a cleaner example handy right now, but find some java examples, they should be straightforward to port.#2020-12-0910:51ordnungswidrigAre you using a midi keyboard to control OBS? 😈#2020-12-0911:44genmeblog@U07FP7QJ0 Thank you, I think this is enough material to digest. As I said previously I'm not sure if I want to add midi controller support, since I achieved what I wanted, ie. dsp path works and can be used to implement target synthsesizer on STM 🙂 (btw. I remember and forget about defwrapper - great idea and I happy to see this as a library)#2020-12-0912:49plexus@U054UD60U doesn't everyone? 😁 I use the pads on the keyboard to switch betweens scenes like camera, share screen, etc#2020-12-0913:03ordnungswidrigHehe, as one of the nerds that build their own keyboards I would rather create custom keyboard or use a “macro pad” to trigger some key combinations… Or use a wifi enabled chip to directly manipulate OBS, now that I think about it 🙂#2020-12-0916:26eggsyntax@U1EP3BZ3Q looking forward to checking this out! Wavetable synthesis has made so many interesting advances in the past few years...#2020-12-0917:02genmeblog@U077BEWNQ I relied on Mutable Instruments source code. Their products sound pretty awesome.#2020-12-0917:22eggsyntaxHave you seen that there are free ports of the Mutable Instruments devices to the (also free, and awesome) VCV Rack virtual modular environment? Although I haven't used the physical modules, reviews suggest that the ports are a pretty close match. Tons of fun to play with 😀
https://vcvrack.com/AudibleInstruments#2020-12-0917:28genmeblogYes!!! I know VCVRack and played with Audible Instruments. Actually, this a wrapper to the MI source, which helped me to find entry point to the Plaits instrument and their wavetable oscillator I've stolen the idea from. I want to say that code is highly readable and it was really fun to port some parts to the Clojure.#2020-12-0922:56genmeblog@U050ECB92 I haven't seen this before! Lovely stuff. Mostly based on overtone/supercollider rendering though. Here I render sound purely in clj.#2020-12-0910:30clyfe[ANN] Tape Framework pre.alpha: kind of like Duct but for Frontend
Announcement https://github.com/tape-framework/doc/blob/master/ANNs/0-pre.alpha.md, tutorial https://github.com/tape-framework/doc/blob/master/docs/Tutorial.md, example app https://github.com/tape-framework/7guis, project https://github.com/tape-framework/.
Gist is: Reagent + Re-Frame + Integrant system out of a Module system (ported from Duct) + an experimental interface to Re-Frame + some extra tooling + a body of recipes.#2020-12-0914:16mpenetfyi there's a (clj) "tape" library out there already https://github.com/mpenet/tape
If you want to do some SEO you might want find another name; or not, personally I don't mind.#2020-12-0915:52bedersI kinda like the meta-data approach.. However, if you go down that route, I would also expect to see it being used in subscriptions.
From one of the samples:
[celsius @(rf/subscribe [::temperature-converter.c/celsius])
Would have expected to see this:
(tape/subscribe temperature.converter.c/celsius)#2020-12-0915:54bedersthat way I don't have to make a translation from keyword to fn (which my IDE also doesn't understand)#2020-12-0916:12clyfe(defn tape-subscribe [f & args]
(let [{:keys [ns name] ::v/keys [sub]} (meta (var f))
kw (if (qualified-keyword? sub) sub (keyword (str ns) (str name)))]
(rf/subscribe (into [kw] args))))
;; (tape-subscribe temperature.converter.c/celsius)
Should work in the meantime I believe.#2020-12-1223:53clyfe@U628K7XGQ Your idea turned out great! https://github.com/tape-framework/mvc/commit/f85fe6b56a3287b5b0f699c87da593dad1d2f8dd#2020-12-1406:31bederscool! Thanks for putting it in!#2020-12-0914:57AleedReleasing Interdep, a library that helps you intercept a monorepo’s deps.edn configs, so as to provide a sane, documented way of managing multiple subrepo deps and aliases.
Many libraries out in wild use Leiningen for monorepo support. Intention of this library is to serve as stop-gap solution using only tools.deps.
https://github.com/rejoice-cljc/interdep#2020-12-0915:15Alex Miller (Clojure team)I wish that had a rationale. I have no idea what problem it's trying to solve.#2020-12-0915:16Alex Miller (Clojure team)(as someone that might be in a position to solve such a problem)#2020-12-0915:17borkdudeThis library came up in #tools-deps before. It tries to solve the multi-repo problem that people have tried to fix with CLJ_CONFIG#2020-12-0915:19borkdudeBut then by generating a deps.edn on the fly#2020-12-0915:19Alex Miller (Clojure team)I'm confused by the discussion of aliases in the readme#2020-12-0915:19Alex Miller (Clojure team)is this the same problem as https://ask.clojure.org/index.php/9849/teams-common-dependencies-tooling-across-multiple-projects#2020-12-0915:20borkdudeyes#2020-12-0915:21Alex Miller (Clojure team)well, I'm really asking @UPH6EL9DH#2020-12-0915:37Aleedso it solves two problems
1. using the nested aliases of subrepo deps, since with default functionality local dep aliases are not activated.
2. calling multiple aliases can be tedious (e.g. :app-main:api-main), so we also match aliases based on configured profiles (http://e.ga :main profile for matching the those aliases)
#2020-12-0915:38Aleedi’ll try to make motivation/docs more clear when I get a chance#2020-12-0915:42Aleeda third problem, btw, is that using local:root deps is not always possible if deployment needs to be reproducible, so in that situation you also need a tool that unifies nested configurations#2020-12-0915:43Alex Miller (Clojure team)these seem like different problems than the ask question above. if there are good problems here, filing an ask question that asks it would be helpful to me. I'm not sure the problems you list are really the problems though, seems like could dig deeper. (like why do you need to invoke nested aliases of subrepo deps? what do those aliases do? etc)#2020-12-0915:48Aleedone basic scenario: I have an :app/test and :api/test alias, and I want to run them from root of project
another more opinionated scenario: I avoided putting subrepo deps in top-level :path and :deps , since they’re automatically loaded. instead, each subrepo puts all its deps under aliases, so I’d call the :app/main and :api/main aliases to load their deps before starting a program. reasoning for this choice, is that I wanted more control over what deps were loaded before starting a program from root#2020-12-0915:50Aleedprior to Interdep, I was using :local/root deps but had to configure all my subrepo deps/aliases in root deps.edn, basically defeating the purpose of separating logic into nested projects (as they were all configured in root, anyway, and had to be run together from there)#2020-12-0915:54Alex Miller (Clojure team)trying to be a little more generic, you have one conceptual project that is broken into multiple parts (here app and api) and you're trying to manage both their independent deps, and their per-component aliases, and dep relationships between the components#2020-12-0915:55Aleedyes 🙂#2020-12-0915:55Alex Miller (Clojure team)maven-style deps are no good for dev purposes. local deps solve some problems but create others.#2020-12-1011:26oliyHi everyone,
I'm pleased to announce the 0.1.3 release of https://github.com/oliyh/superlifter, a DataLoader for Clojure/script. I've done a lot of thinking with help from several people and rewritten quite a lot of code to make it much more robust, especially when handling the patterns used by a graphql server. As a result the example project showing integration with lacinia has changed to use the new feature: elastic triggers.
This release adds support for:
• Elastic triggers as a more reliable method for 1+n queries#2020-12-1112:32val_waeselynck@U076R6N1L Thanks, good to see generic solutions for this important problem!
One piece of feedback: it would have been nice for the configuration keywords to be namespaced, e.g :superlifter.triggers/queue-size etc.#2020-12-1114:53oliyhi @U4LJRA116 thank you for the feedback, could you help me understand what the benefit would be? these keys are kept within the superlifter context and so do not need to live alongside other keywords that they might clash with#2020-12-1117:24val_waeselynck@U076R6N1L code clarity, and in particular configuration traceability.
This would be useful as early as the project's README, where it would be apparent immediately which keywords are interpreted by this lib, and which are specific to the business domain.
What's more, in real-world scenarii, don't underestimate how far upstream of calling the superlifter these configuration keys might end up, e.g as part of Integrant configuration files.#2020-12-1016:27blueberryCUDA 11.1 is now supported in Clojure. ClojureCUDA 0.12.0 has just been released.
http://clojurecuda.uncomplicate.org
https://github.com/uncomplicate/clojurecuda#2020-12-1111:47Yehonathan SharvitNew lib: defntly
defntly - A library that makes the creation of defn like macros a commodity
https://github.com/viebel/defntly#2020-12-1117:38Ben SlessI think there's a typo in in the readme at
catch Throwable ~e
Otherwise, cool library 🙂#2020-12-1216:30Yehonathan SharvitThank you @UK0810AQ2. Typo fixed#2020-12-1119:38Alex Miller (Clojure team)Clojure https://clojure.org/releases/devchangelog#v1.10.2-rc1 is now available. This is a release candidate and we would appreciate it if you could try it in your own projects. If you encounter issues, https://ask.clojure.org is the best place to file a report (or feel free to discuss here in #clojure if not sure). Below is a changelog for 1.10.2 (items new to this release since 1.10.2-alpha4 are marked with a *):
1 Fixes
1.1 Interop / JVM
• https://clojure.atlassian.net/browse/CLJ-1472 Ensure monitor object is on stack, for verifiers
• https://clojure.atlassian.net/browse/CLJ-2517 More fixes for invocation of static interface methods with primitive args - thanks Nicola Mometto!
• https://clojure.atlassian.net/browse/CLJ-2492 Remove uses of deprecated Class.newInstance()
• https://clojure.atlassian.net/browse/CLJ-2534 Fix javadoc urls for JDK 11+ - thanks Andy Fingerhut!
• https://clojure.atlassian.net/browse/CLJ-2571 Add Throwable return type hint to ex-cause - thanks Michiel Borkent!
• https://clojure.atlassian.net/browse/CLJ-2572 Avoid reflection in clojure.data - thanks Michiel Borkent!
• https://clojure.atlassian.net/browse/CLJ-2502 Fix reflection warnings in clojure.stacktrace/print-stack-trace - thanks Michiel Borkent!
1.2 Core
• https://clojure.atlassian.net/browse/CLJ-2580 Fix case expression branch analysis that resulted in compilation error - thanks Ghadi Shayban!
• https://clojure.atlassian.net/browse/CLJ-2564 Improve error message for case
• https://clojure.atlassian.net/browse/CLJ-2585* nth with not-found on regex matcher returns not-found on last group index
• https://clojure.atlassian.net/browse/CLJ-1364 vector-of does not implement equals or hashing methods
• https://clojure.atlassian.net/browse/CLJ-2549 vector-of does not implement IObj for metadata - thanks Andy Fingerhut!
• https://clojure.atlassian.net/browse/CLJ-1187 quoted metadata on empty literal colls is lost - thanks Nicola Mometto!
• https://clojure.atlassian.net/browse/CLJ-2459* ExceptionInInitializerError if jars executed with java -jar - thanks Piotrek Żygieło!
1.3 Printing
• https://clojure.atlassian.net/browse/CLJ-2469 Fix errors in printing some maps with namespace syntax
• https://clojure.atlassian.net/browse/CLJ-1445* pprint doesn't print collection metadata when *print-meta* is true
1.4 Docstrings
• https://clojure.atlassian.net/browse/CLJ-2295 Eliminate duplicate doc string printing for special forms - thanks Andy Fingerhut!
• https://clojure.atlassian.net/browse/CLJ-2495* prepl docstring is incorrect
• https://clojure.atlassian.net/browse/CLJ-2169* conj has out-of-date :arglists - thanks Michał Marczyk!
2 Performance
• https://clojure.atlassian.net/browse/CLJ-1005* Use transient map in zipmap - thanks Michał Marczyk!#2020-12-1212:28borkdudeClj-kondo v2020.12.12 ✨
New: docs of all available linters!
https://github.com/borkdude/clj-kondo/blob/master/doc/linters.md
and 12 other fixed issues.
Release notes: https://github.com/borkdude/clj-kondo/blob/master/CHANGELOG.md#v20201212
Special thanks to Clojurists Together for being the main sponsor in 2020Q4.
Happy linting!#2020-12-1212:29borkdudeCome chat in #clj-kondo if you have questions.#2020-12-1216:29Michaël SalihiFantastic, what a great addition the linting list!
Thx @U04V15CAJ#2020-12-1218:20blueberryNew release of Neanderthal 0.39.0Y CUDA 11.1 is now supported. High performance matrices and linear algebra on CPU & GPU.
http://neanderthal.uncomplicate.org#2020-12-1218:32djblueNew release of portal https://github.com/djblue/portal/blob/master/CHANGELOG.md#070---2020-12-12 🎉#2020-12-1320:04borkdudeBabashka 0.2.5 offers integration with tools.deps for bb scripts and for invoking a JVM clojure process:
https://github.com/borkdude/babashka/blob/master/CHANGELOG.md#v025
For questions, come chat in #babashka#2020-12-1511:26practicalli-johnpracticalli/clojure-deps-edn 2020-12-15
• library version updates (see CHANGELOG)
• rebel-readline REPL with Reveal (thanks to didibus)
• using :replace-deps for community tools that do not require project dependencies, e.g. :project/outdated
• antq pull request - now includes :replace-deps when checking for outdates library versions
• documentation updates, including elaboration of possible user level configuration locations, especially XDG_CONFIG_HOME OS setting.
• GitHub actions lint with clj-kondo for commits and pull requests on practicalli/clojure-deps-edn repository
https://github.com/practicalli/clojure-deps-edn#2020-12-1516:07Sam RitchieVersion 0.14.0 of the SICMUtils computer algebra system for Clojure(script) is out: https://github.com/sicmutils/sicmutils
SICMUtils is a scientific computing system that offers:
• Symbolic expression algebra and powerful simplification routines
• forward-mode automatic differentiation
• ODE initial value solvers
• many different definite integral methods
• a full, cross-compatible numeric tower (rational numbers, complex numbers, BigInt support) for Clojure and Clojurescript
Interactive REPL use and Jupyter support works; the next step is to integrate SICMUtils into #nextjournal, and build integrations that let SICMUtils act as a physics engine for three.js and other libraries like this.
Come say hi in #sicmutils 👋 ,and give the full reference manual a skim for an overview of the library’s features: https://cljdoc.org/d/sicmutils/sicmutils/0.14.0/doc/reference-manual#2020-12-1517:08Alex Miller (Clojure team)Cognitect and Nubank are Sponsoring Open Source Developers
https://cognitect.com/blog/2020/12/15/sponsoring-open-source-developers#2020-12-1520:55jimmyShould the links that say “sponsoring” be pointing to https://github.com/orgs/cognitect/sponsoring ?
Looks like the sponsorships started today. So I’m guessing that is the case?#2020-12-1521:02Alex Miller (Clojure team)that page doesn't show anything to people outside the org as far as we can tell (we have a question in to github about that)#2020-12-1521:03Alex Miller (Clojure team)looks great for me though. wish you could see it! :)#2020-12-1521:03Alex Miller (Clojure team)maybe there is some checkbox somewhere to check, but we haven't found it#2020-12-1521:17seancorfield@U5K8NTHEZ What does that page show for you?#2020-12-1521:17jimmy#2020-12-1521:18Alex Miller (Clojure team)thanks! was just discussing w/ gh and seems like it's logged in vs logged out, to be fixed#2020-12-1521:19Ben SlessThat's amazing#2020-12-1521:25didibusThis is great, and if all these sponsors are truly 6 figures, I'm quite happy about it and what it means for the future of the Clojure tooling and ecosystem.#2020-12-1521:27Alex Miller (Clojure team)6 figures is the total, not per person :)#2020-12-1521:28Alex Miller (Clojure team)but the idea is that if every company kicked in a small percent of revenue, these people could actually make a living making tools#2020-12-1521:31Ben Sless6 figures is nothing to sneeze at. It can be 1e6, can be 5e6, too.#2020-12-1521:33didibusAh I see, well I still totally appreciate the move, and it's an amazing gesture of support.#2020-12-1521:38Alex Miller (Clojure team)Most developers are being supported at $500+/mo initially#2020-12-1521:43LasDo you accept nominations?#2020-12-1521:43Alex Miller (Clojure team)Sponsorship is not something to apply for. We make decisions on sponsorship based upon many factors.#2020-12-1521:44Alex Miller (Clojure team)If you want to sponsor someone, I encourage you to do so! :)#2020-12-1523:59pezThis is such a great move. The stance is super clear. It will be heard. Personally, I have been dancing and singing and hugging my family members for hours now. Still am as happy as when I realized Calva was selected for this. Thank you, thank you, thank you! ❤️#2020-12-1602:14mauricio.szaboAre there any plans to sponsor people that are still on the GitHub's waitlist (because their country is still not eligible)?#2020-12-1602:16Alex Miller (Clojure team)we are evaluating some alternatives for cases like that#2020-12-1617:40mauricio.szaboBTW, just saw that you're also funding via Patreon. That's great! I hope other companies follow the example 👍#2020-12-1700:06quollI want to say thank you to NuBank/Cognitect. I feel immensely privileged for this. ❤️#2020-12-1609:42javahippieclj-test-containers 0.4.0 was released!
* Clojars: https://clojars.org/clj-test-containers
* Changelog: https://github.com/javahippie/clj-test-containers/blob/master/CHANGELOG.md
* Documentation: https://cljdoc.org/d/clj-test-containers/clj-test-containers/0.4.0/api/clj-test-containers.core
The Testcontainers version was updated to the latest one, optimizations were made to copying resources to the containers, and a new function perform-cleanup! was introduced, which cleans up all resources which were created in a REPL session and could not be cleaned by the default mechanism. If you want to get a little more detail on the library, this week a session on the topic was uploaded on YouTube: https://www.youtube.com/watch?v=iViT_p02jDs#2020-12-1615:03wilkerlucio[com.wsscode/pathom "2.3.0"] is out! About this release:
- If you didn't check in a while, defresolver is now smarter and can infer inputs and (some) outputs automatically, check the docstring for details
- Removing alpha state from the library given it's been running without issues for a while, and API is not going to change
- I expect this to be the latest feature release of Pathom, from now on its on maintenance mode and its likely to only get bug fixes from now on
- reader3 is marked as experimental and its discontinued in Pathom 2, for the evolution of this use Pathom 3
Detailed changelog at: https://github.com/wilkerlucio/pathom/blob/master/CHANGELOG.md#2020-12-1719:18Alex Miller (Clojure team)New small release of clojure tools https://clojure.org/releases/tools#v1.10.1.763:
• Set exit code for -X ex-info error
• Sync up cli syntax for aliases in help#2020-12-1821:27vlaaadreveal New version of #reveal — https://vlaaad.github.io/reveal/ 1.2.180 — is out! This major release focuses on improving action results UI:
- Reveal can now show multiple result panels, activated by Ctrl+Enter instead of Enter in the action popup;
- for every result panel it can now show all tabs in that panel as a hierarchical tree.
Watching ref as latest value or log of successors? Why not both at the same time!#2020-12-1821:48bedersReveal is amazing!#2020-12-1914:04bruno.bonacciJust released: μ/log v0.6.0 (https://github.com/BrunoBonacci/mulog) with the following changes
• [*NEW*] Added Filesystem metrics sampler (thanks to @emlyn)
• [*NEW*] Added Advanced Console Publisher with JSON formatting.
• [*NEW*] Added support for Elasticsearch data-streams. (thanks to @tovieye.ozi)
• [*NEW*] Added support for Nippy encoding to the Kafka publisher
• Migrated to JSON encoding from Cheshire to Jasonista (thanks to @tovieye.ozi)
• various other fixes (thanks to @emlyn.corrin @ak407)
check the full doc here: https://cljdoc.org/d/com.brunobonacci/mulog/0.6.0/doc/readme#2020-12-2002:03mauricio.szaboJust published Chlorine version 0.10.2 - socket REPL package for Atom. On this release, only bugfixes 🙂. Only one new feature is that Chlorine is now caching clj-kondo's results for 20s, so if you have no REPL connected you can issue lots of "doc-for-var" and "goto-var-definition" and they'll resolve really fast 😄.
(to be honest, I'm only caching because I'm preparing a release that will also rely on clj-kondo for autocomplete, when there's no REPL connection ready 😄)#2020-12-2002:24tony.kayFulcro’s websocket remote has been updated to support client use from CLJ. Most of Fulcro can run in a headless mode in CLJ without React. This makes it possible for you to make a CLJ Fulcro app that can communicate with a Fulcro server. You could use this, for example, to leverage the EQL/transaction processing of Fulcro in any Clojure JVM application.
https://github.com/fulcrologic/fulcro-websockets#2020-12-2010:13pezCan ClojureScript apps also be using the non-react parts of Fulcro?#2020-12-2016:49tony.kayOf course#2020-12-2118:47tony.kay@U0ETXRFEW see for example: https://www.youtube.com/watch?v=ng-wxe0PBEg&ab_channel=TonyKay#2020-12-2007:46Yehonathan SharvitBook excerpt: Applying Git and Optimistic Concurrency Control principles to Data Oriented Programming https://blog.klipse.tech/databook/2020/12/18/occ-do-git.html#2020-12-2014:26st3fanI wrote another GitHub App/Bot in Clojure .. it may be useful for the coming week(s) … https://github.com/marketplace/devbots-vacation#2020-12-2014:27st3fanDocumentation at https://devbots.xyz/documentation/vacation/#2020-12-2019:44JakubIntroducing Liz: A new general purpose programming language
- written as Clojure look-a-like EDN
- compiled down to small native binaries for x86, ARM, RISC-V, WASM and other architectures
- seamless interop with C libraries
- compiler written in Clojure using tools.analyzer, leveraging Zig compiler
https://github.com/dundalek/liz#2020-12-2019:55eggsyntaxInteresting!#2020-12-2020:06David PhamYep, interesting.#2020-12-2023:00borkdude@U70QD18NP Looks interesting. So it's a clj -> zig transpiler basically? Why ^:pub and not just use defn- for private funs, while defaulting to public? I haven't looked at zig, but your project makes me want to take a look at it.#2020-12-2023:27Jakub@U04V15CAJ It is basically a transpiler, although clj -> zig would be an over statement, it is more like a zig dialect with some clojureisms. One of the use cases is to have a language that could be used to write native extensions for using in Clojure via JNI, so I try to keep it low level and don't include abstractions with overhead.#2020-12-2023:27JakubGreat idea with defn- , I will add that.#2020-12-2023:28borkdudeThis is interesting. I could also see myself using this to write babashka pods perhaps.#2020-12-2023:30JakubZig is pretty neat, definitely worth checking out. I wanted to see if there is something better than C for writing native code.#2020-12-2023:30JakubIt seems to tick all the boxes, good design choices and focus on simplicity.#2020-12-2023:33borkdude@U70QD18NP how does it work with the type-system bridging? clj is dynamically typed, but zig is statically typed#2020-12-2023:34borkdudeAh, I see, the type hints are translated to type info in the target#2020-12-2023:38JakubExactly, it feels like a bit of an abuse, but seems to work for now. One limitation is with more complex types, it would be good to create a DSL for it, for now it leaks a bit and one can use a string with a Zig expression for the type.#2020-12-2022:50borkdudeSmall Clojure Interpreter 0.2.0: https://github.com/borkdude/sci/blob/master/CHANGELOG.md#v020
Follow up in #sci#2020-12-2113:18miroHi folks! I have just added some simple Kafka tasklets for Titanoboa since there have been few requests for that:
https://github.com/mikub/titanoboa-tasklets
🎄 Have a merry xmas week!#2020-12-2114:14juhoteperiReagent v1.0 is out: https://github.com/reagent-project/reagent/blob/master/CHANGELOG.md#100-2020-12-21#2020-12-2122:17blueberryNew release of Deep Diamond 0.17.0-alpha: CUDA 11.1 is now supported. High performance tensors and neural networks on CPU & GPU.
https://github.com/uncomplicate/deep-diamond#2020-12-2205:28tony.kayI’m happy to announce Guardrails 1.1.0. Guardrails is a simple library that lets you more easily add specs to your functions, and have those checked as your program runs; however, instead of throwing an exception (as instrument does) it simply reports the problem with expound. This lets you easily see errors with data expectations as you work in development (with a stack trace), but doesn’t interfere with your flow if the problem was with your spec, and not your code (very commonly the case).
The biggest problem with Guardrails to date is that a slow spec can really make your program feel unresponsive.
This version contains a significant performance improvement when working with Clojure. It pushes the validations off to a separate thread so that call-site overhead when running things in your dev REPL is a constant (measured on my machine as about 3µs). The checks run in an alternate thread so you eventually see the problem, but don’t have to wait on it while you work.
See the README for more details.
https://github.com/fulcrologic/guardrails#2020-12-2210:11metasoarousI'm excited today to announce the release of Toto, a static site generation framework for Clojure, complete with live code reloading!
https://github.com/metasoarous/toto
As some of you may be aware, this functionality has existed in https://github.com/metasoarous/oz (dataviz and scientific document library) for some time now, but it has been difficult to discover or highlight given everything else Oz has to offer. My hope is that by releasing this as a separate project, more Clojurists will be able to take advantage of these features.
You can get started with
clj -Sdeps '{:deps {metasoarous/toto {:mvn/version "0.0.1-alpha1"}}}'
Please give it a try and let me know what you think.
Thanks!#2020-12-2210:40fjolneActually there are others with HCR https://github.com/OrgPad-com/volcano#2020-12-2210:45metasoarousThanks for the catch @UDQ2UEPMY!#2020-12-2212:16Ertugrul CetinHi everyone, I'm thrilled to announce the release of jme-clj. This library is a Clojure wrapper for jMonkeyEngine. jMonkeyEngine is a 3D game engine for adventurous Java developers (now Clojure developers, I hope). Feel free to share your feedback!
GitHub: https://github.com/ertugrulcetin/jme-clj
Demo video: https://www.youtube.com/watch?v=IOPz9I49snM#2020-12-2412:45Jakub ZikaGreat news. I will bring to life all my objs from Forger app finally ;]. I am posting nice article I stumbled upon as i was reading about jmonkey engine.
https://www.gamedesigning.org/engines/jmonkey/#2020-12-2213:27blueberryDeep Learning for Programmers: An Interactive Tutorial with CUDA, OpenCL, DNNL, Java, and Clojure
Release Candidate 1 available for purchase
https://aiprobook.com/deep-learning-for-programmers/#2020-12-2217:42Jarrod Taylor (Clojure team)This was released last year but not announced. Ever wanted to visualize your Datomic schema? Perhaps the schema-cartographer might be of interest. https://github.com/JarrodCTaylor/schema-cartographer#2020-12-2217:51dgb23the example schema link seems to be broken!
Points to: https://github.com/JarrodCTaylor/schema-cartographer/blob/master/resources/complete-example-schema.clj
Should point to: https://github.com/JarrodCTaylor/schema-cartographer/blob/master/resources/complete_example_schema.clj
underscores instead of hyphens#2020-12-2218:12val_waeselynck@U0508JRJC There can be good reasons to not follow the :entity-type/attribute naming convention for Datomic attributes; for such cases, it would be good to be able to annotate the entity type explicitly. Don't complect naming and structure 🙂#2020-12-2221:40HuahaiReleased Editscript 0.5.0, a library to diff/patch Clojure/script data structures. This release added the option to diff inside strings, and had major speed improvement for the diff algorithm, some data sets saw more than 2X speed up. https://github.com/juji-io/editscript#2020-12-2222:10seancorfielddepstar {:mvn/version "2.0.160"} -- https://github.com/seancorfield/depstar -- This is a major new release: depstar 2.0 behaves like a "tool" rather than a "library", so you use :replace-deps instead of :extra-deps and provide any :aliases you need as a command-line option (for -X). See below for more details of the release. Follow up in #depstar (consider this release a direct result of GitHub sponsorship by Cognitect/Nubank and five others -- thank you!).
* depstar now behaves like a "tool" rather than a "library" -- you should use :replace-deps to specify it as a dependency rather than :extra-deps and it will compute the project basis from the system, user, and project deps.edn files using clojure.tools.deps.alpha. By default, it applies no aliases but you can specify an :aliases exec-arg with a vector of aliases to apply. By default, it behaves like the CLI's -Srepro option in that the user deps.edn file is ignored: specify :repro false if you want the user deps.edn file to be included in the basis. Fixes #47, #48, #49.
* :compile-ns exec-arg supports a vector of namespaces to be compiled; this overrides :aot and :main-class and allows you to AOT-compile specific namespaces for inclusion in a thin JAR, if needed. Fixes #51.
* The group/artifact IDs and the version can now be overridden by exec arguments (`:group-id`, :artifact-id, and :version respectively, and depstar will update your pom.xml file to match). Fixes #53.
* :sync-pom true will automatically run the equivalent of clojure -Spom. See README for more details. Fixes #54.
* The log4j2 plugins cache is now merged correctly. Fixes #50.
* Supported entry points: hf.depstar/jar and hf.depstar/uberjar via -X, hf.depstar.uberjar/build-jar via REPL or library usage. The following legacy entry points are all deprecated: hf.depstar.jar/-main, hf.depstar.jar/run, hf.depstar.uberjar/-main, hf.depstar.uberjar/run, and hf.depstar.uberjar/run*.
* Automated tests now exist, along with CI via GitHub Actions, against JDK versions 8, 11, 14, 15, 16-ea, and 17-ea. Fixes #26.#2020-12-2309:51mpenetA new version of https://github.com/exoscale/coax has been out for a while (unannounced here) - 1.0.0-alpha10
It adds caching of coercers resolution (it will parse spec forms once per spec only), so it's a massive speed increase.
Be aware of how caching works when you work from the repl, you can turn it off via options. https://github.com/exoscale/coax#caching#2020-12-2309:58mpenetWe also released an initial version of https://github.com/exoscale/telex - an http client based on https://java.net.http.httpclient
It's very lightweight, runs everything through an interceptor chain that you can control (using https://github.com/exoscale/interceptor). For instance by default it supports both ring1 ring2 format depending on the chain you specify.
The default interceptor chain is ring1 style. You can also do things such as skipping any kind of header parsing or ring style req/resp and hit the low level java api from that chain, basically lowering "framework" overhead to almost nothing.
It leverages the CompletableFutures returned by the client for the async part and also provides an api to compose these via https://github.com/mpenet/auspex (it's very similar to manifold in terms of api, but just uses completablefuture interop., so another very thin facade)#2020-12-2311:12vemvinteresting! what was the main thing that lead you to create this project?#2020-12-2311:18mpenetThe need to find a replacement for aleph http client, plus in one particular case limiting dependencies#2020-12-2311:26mpenetHaving interceptors at the bottom also, we use these quite a bit#2020-12-2311:48otfromcool. I have a new api I need to hit. 🙂#2020-12-2310:07mpenetNew version of https://github.com/mpenet/tape is out as well, using the latest ChronicleQueue/ChronicleBytes#2020-12-2312:56Jakub Holý (HolyJak)In
> Chronicle Queue is similar to a low latency broker less durable..
wouldn't it be better with brokerless or broker-less?#2020-12-2313:04mpenetright#2020-12-2418:09bringeCalva version 2.0.137 is out with https://clojureverse.org/t/calva-gets-static-analysis-features-via-clojure-lsp/6939, thanks to clojure-lsp!
• Go to definition/references
• Peek definition/references
• Find all references
• Rename symbol
• Change all occurrences
• Hovers
• https://github.com/BetterThanTomorrow/calva#demo-references-code-lens-enable-in-settings, that peek references when clicked
• https://github.com/BetterThanTomorrow/calva#demo-outline
Feel free to chat us up in #calva. More feature integration from clojure-lsp is on the horizon.#2020-12-2421:30borkdudeThis is really exciting!#2020-12-2421:35borkdude#2021-12-2711:54pezAnd now version 2.0.138 brings refactorings from the same source. 😄 https://calva.io/refactoring/#2021-12-2720:05bringeThese are pretty awesome#2021-12-2801:03dregreAmazing work guys.#2021-12-2811:16rfhayashi@U2M06S71C#2021-12-2715:03plexusClojurians-log, the publicly searchable archive of this Slack community, now renders emoji reactions. With thanks to @mitesh who did the bulk of the work on this. e.g. https://clojurians-log.clojureverse.org/announcements/2020-12-22#2021-12-2715:10oxalorg (Mitesh)Thanks, this was super fun to work on and definitely a team effort! parrot If anyone has some cool ideas of what we can do with the logs feel free to create an issue: https://github.com/clojureverse/clojurians-log-app/issues ^_^#2021-12-2721:13ikitommi[metosin/jsonista "0.3.0"] is out. Jsonista fast JSON decoding & encoding library for Clojure built directly on top of Jackson Databind.
• updated to use latest Jackson version, 0.12.0
• BREAKING: Joda-classes are not support by default, register com.fasterxml.jackson.datatype.joda/JodaModule to add support - or use java.time classes instead.
• new jsonista.tagged ns for building Transit-style tagged JSON value representations. Users have reported up to 10x better encoding throughput compared to vanilla Transit.
• Jsonista just hit 1M downloads on clojars 🎉
Github: https://github.com/metosin/jsonista
Big thanks to all contributors.#2021-12-2721:14ikitommiguide for the tagged json here: https://github.com/metosin/jsonista#tagged-json#2021-12-2721:56vemvThanks for pouring the json 🍻#2021-12-2722:08Karol WójcikWill tagged json get support on cljs side?#2021-12-2722:58delaguardo(-> (keyword "x/z" "y") (j/write-value-as-string mapper) (doto prn) (j/read-value mapper) ((juxt namespace name)))
"[\"!kw\",\"x/z/y\"]"
["x" "z/y"]
using single argument for tagged form of keyword (and symbol as well) could cause problems for keywords slightly violating clojure’s reading rules
I would like to suggest this form ["!kw",["namespace","name"]] for namespaced and ["!kw",["name"]] for simple keywords. I did something similar in one of my projects and nether regretted it.#2021-12-2723:00delaguardoawesome lib btw! I already scheduled some time for “cheshire->jsonista” type of refactoring#2021-12-2723:06borkdudeWould it make sense to come up with a default scheme that would allow you to serialize EDN via jsonista as an alternative to transit, for full compatibility? Support for sets, uuids, bytes, ...#2021-12-2723:26delaguardodefinitely make sense to me, I will need it anyway#2021-12-2723:39borkdudetransonista#2021-12-2809:11ikitommi@U04V4KLKC good point about the keywords. Just merged in https://github.com/metosin/jsonista/pull/40, didn’t check if that resolves the issue#2021-12-2809:16ikitommi@UJ1339K2B cljs not planned, but interesting idea. Interested in developing the cljs-client? could be just a new ns?#2021-12-2809:17borkdude@U055NJ5CC One of the attractive properties of transit is that it is cross-language, not just clj <-> clj. So when using tags in clj, it would be nice to be able to decode this in Go or Ruby, or whatnot. Btw, this is a real problem, not just one I made up.#2021-12-2809:17ikitommi@U04V15CAJ I think there could be encoders & decoders for all common types. Also, need to handle keys too, the current impl just handles values.#2021-12-2809:18ikitommiare there any cross-language tagging conventions out there? (besided transit, which hasn’t gained much traction outside of clojure, I believe)#2021-12-2809:19borkdudebut I guess in Go you could look at your own made up tags and do the custom serialization. Good question. I think JSON schema has something around content types#2021-12-2809:19Karol WójcikWould love to, but certainly not in this year. To much consumed by studies and work ;(
Anyway if this implementation could be faster than transit a lot of companies could benefit from it. Especially when doing SPA SSR.#2021-12-2809:19ikitommibtw, the tagged-json is faster than nippy in the simple benchmarks. which sounds fishy.#2021-12-2809:19borkdudehttps://json-schema.org/understanding-json-schema/reference/non_json_data.html#2021-12-2809:22ikitommiIf performance is the goal, one option is to help make the current Transit faster.#2021-12-2809:23ikitommigreat discussion, will start a Clojureverse thread out of this.#2021-12-2809:27borkdudeI've had this problem for a while https://github.com/cognitect/transit-clj/issues/43 which may be low hanging fruit to speed up transit#2021-12-2809:27borkdudeThis is due to too many flushes#2021-12-2809:41delaguardohttps://github.com/metosin/jsonista/pull/41
here is a PR to handle keyword format suggested by me#2021-12-2810:19dominicmCan this be used to build a new transit server? Then you can use the transit cljs client?#2021-12-2810:23ikitommihttps://clojureverse.org/t/tagged-json-with-jsonista-vs-transit/6946#2021-12-2810:24ikitommihonestly, haven't checked the transit internals for a while. Might be able to do a transit server, but would need to read the spec/source.#2021-12-2810:27borkdudetransit also does caching of symbols and values which compresses the payload. this is relevant for network traffic, but it may be less good for performance. so it's good take make explicit what you are optimizing for#2021-12-2810:28delaguardohttps://github.com/cognitect/transit-format#recursive-tag-based-encoding
there are two formats missing in jsonista:
• string-based encoding
• object-based encoding
#2021-12-3112:35roklenarcicI think transit might have ability to represent recursive data structures, which JSON lacks?#2021-12-2817:11bozhidarCIDER 1.0 is out! You can read more about the release here https://metaredux.com/posts/2020/12/28/cider-1-0.html Cheers! cider#2021-12-2817:25eggsyntaxCongratulations, and thanks for your sustained stewardship and work on it!#2021-12-2822:54pezSo awesome, @U051BLM8F! Thanks for providing!#2021-12-3123:18Steven Deobald@U051BLM8F It’s not an overstatement to say we built a significant part of nilenso’s early Clojure business thanks to CIDER and, nearly a decade later building tools for non-profits instead, it’s again an essential for me. Thank you so much. 🙂#2021-01-0108:26bozhidarYou're welcome! cider#2021-12-2912:10borkdudeBabashka v0.2.6 released:
https://github.com/borkdude/babashka/blob/master/CHANGELOG.md#v026
The main new feature in this release is the pod registry: https://github.com/babashka/pod-registry
This allows you to use pods without having to install them using a separate package manager:
https://book.babashka.org/#_pod_registry. Join #babashka for discussion.#2021-12-2913:51ericdalloReleased 20201229T134026 of clojure-lsp which adds more https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_semanticTokens and enable it by default 🎉
For more information check #lsp#2021-12-3012:41jacekschae🎉 The Learn Reitit course is ready 🎉
All videos have been uploaded ~ 9h. You can still grab it with an early access price .
Big thank you to @ikitommi @seancorfield James R and @thheller for their feedback and support!
https://www.learnreitit.com#2021-12-3116:45borkdudeOne last time this year!
@rahul080327 and I are happy to announce the babashka sqlite3 pod!
https://github.com/babashka/pod-babashka-sqlite3#2021-12-3116:45borkdudeThe pod is self-contained, no need to install sqlite3 on your system.
Implemented in golang and uses transit for communication. Even blobs work. Join #babashka for discussion.#2021-12-3117:13pezYou can do one more, I am sure, @U04V15CAJ 😃#2021-01-0113:12benedekHNY release of mranderson: https://github.com/benedekfazekas/mranderson/blob/master/CHANGELOG.md#052
mranderson is a dependency shadowing and inlineing tool. specially interesting for tooling development but could be helpful for anything
enjoy :)#2021-01-0211:33borkdudeAnnouncing the puget CLI:
https://github.com/borkdude/puget-cli
The primary use case is to pipe EDN to it and get pprinted + colorized output. This composes well with other clojure CLI tools like jet, clj-kondo and bb.
It can be installed using brew on linux and macOS and scoop on Windows.#2021-01-0223:26littlelihttps://github.com/littleli/scoop-clojure/pull/139 🙂#2021-01-0214:15borkdudeAnnouncing the carve CLI:
https://github.com/borkdude/carve#cli
Carve is a tool to remove unused vars from your project. Have fun!#2021-01-0223:24littlelihttps://github.com/littleli/scoop-clojure/pull/140 🙂#2021-01-0311:47practicalli-johnExcellent, I'll promote it from the experimental aliases in the Practicalli deps.edn config.
:project/unused#2021-01-0400:58simongrayI compiled a list of Clojure resources for domain-specific languages and parsing: https://github.com/simongray/clojure-dsl-resources
Suggestions are very welcome. I’m just a lowly programmer trying to educate myself about this space.#2021-01-0408:47borkdudeMade some suggestions:
https://github.com/simongray/clojure-dsl-resources/issues/1#2021-01-0409:12ikitommimaybe routing libs should be included? compojure, bidi, reitit etc.#2021-01-0409:42simongray@U055NJ5CC I’ll consider that. I don’t think they should go in the regular data-based/classic DSL subcategories, but perhaps they could get a separate section?#2021-01-0411:29ikitommi:thinking_face: both ok, I think. Would be easier to compare if they were under same category.#2021-01-0411:33borkdudeimo, routing dsls are just as dsl as html dsls#2021-01-0418:42eggsyntaxGreat to have a centralized list of Clojure DSL stuff -- thanks for putting it together!#2021-01-0420:47simongray@U077BEWNQ NP! They’re a useful way for me to get an overview too.#2021-01-0420:52simongray@U04V15CAJ Part of the tricky part of defining a DSL in Clojure is that everything blends together. I think there’s a meaningful distinction with the way one uses (what I would call) a DSL and then configuration for a web service. The former is used adhoc in various places, while the latter is often has a much simpler grammar and is more situated in the application process.#2021-01-0420:55simongrayIs a hash map used to describe a web service a DSL? I would argue that it definitely could be, but only if it’s used in a distinctly different way from how hash maps are typically used. A DSL sort of requires a grammar that is different from the typical usage of language constructs.#2021-01-0420:59borkdudeI'm not so sure where to draw the line. The below stuff looks like hiccup to me, but for routing (this is bidi):
[""
[[["/users/" :user-id]
[["/topics" [["" :topics] ["/bulk" :topic-bulk]]]]]
[["/topics/" :topic] [["" :private-topic]]]
["/schemas" :schemas]
[["/orgs/" :org-id] [["/topics" :org-topics]]]]]
#2021-01-0421:01borkdudeOften a distinction is made between eDSLs (using language constructs) and DSLs (usually in text). Almost everything in Clojure is an eDSL if you use data to describe something#2021-01-0421:24simongrayI mean that is definitely different from typical usage of vectors, but all it really does is define a tree of routes. Most of what the more data-oriented web libraries do is to combine something like that bidi example with some regular old maps. Is that really a DSL? I think it’s great that Clojure is so focused on data > function > macros, but I think something that is singular in purpose and which can be parsed in a few lines of code can hardly be called a DSL.
Something like Hiccup is obviously simple-looking too, but it also comes with - obviously inherited from HTML and XML - a very rich set of semantics and additional syntax, even though on the surface it’s just a bunch of [:tag {:attr ...} [:child ...]]. When you write Hiccup, you’re painting a web page. When you write a bidi route, you’re writing a bidi route.#2021-01-0421:25simongrayNot knocking on bidi, reitit, pedestal, compojure and so on AT ALL, but I think they’re quite different.#2021-01-0421:26eggsyntax> Often a distinction is made between eDSLs (using language constructs) and DSLs (usually in text). Almost everything in Clojure is an eDSL if you use data to describe something
Seems worth mentioning here (for anyone who hasn't read it) Martin Fowler's book Domain Specific Languages, which I believe initially coined that external/internal DSL distinction, and which IMHO is indispensable for anyone diving into DSLs.#2021-01-0421:28simongrayThanks, I’ll check it out 🙂#2021-01-0421:29simongray(on to the Tsundoku pile it goes :P)#2021-01-0421:35borkdude@U4P4NREBY I still don't really see the difference. The interpreter (or compiler) for reitit routes is quite sophisticated, althought their notation is very simple. So yeah, you could argue, is JSON/YAML/hiccup vector/maps config a DSL when there is a complex interpreter behind it, or what makes the DSL a DSL in that case?#2021-01-0421:37borkdudeIs a Dockerfile a DSL because of the machinery behind it or because of the superficial syntax? And what if you write this Dockerfile in JSON or YAML, is it then a config file or still a DSL?#2021-01-0421:54simongrayI would definitely say that a Dockerfile is a DSL since there are both very specific semantics and syntax involved and the purpose of a Dockerfile is varied enough that I would call it a distinct language. If you write a Dockerfile in a different language, then yes, that’s a DSL too, because you’re still writing using the Docker semantics and some slightly different syntax.
At some point a cut has to be made, though. What about a path in a file system? Is that a DSL? I mean, it is a language of sorts. You can compose layers of file system navigation using slashes and there are operators, e.g. .. to backtrack. But all you’re really doing with this language is define routes - kinda like bidi. So using a loose definitions of what makes a DSL, a file path is a DSL and a bidi route is a DSL too.
To me, a DSL is not just something that does one very simple thing. If we’re being really pedantic about it, sure, we could always define a DSL to be that. I think that’s setting the bar a bit too low. There has to be cutoff point. Yours is definitely in a different place than mine and that’s okay :-)#2021-01-0422:00simongrayObviously, DSLs are usually meant to do very specific things, so I’m not saying that the purpose of the DSL can’t be simple, but if its grammar is incredibly basic too… then the number of items in the list will definitely need to be of a different magnitude entirely. I’m not sure it would be fit for the purpose I had for it any longer (documenting DSLs in Clojure and tools for making them).#2021-01-0422:02simongrayThat said, I am definitely considering adding a separate section for data-oriented configuration and alike, since it’s so common in Clojure.#2021-01-0422:03borkdudeSo is deps.edn a DSL: the machinery behind it is certainly not trivial, but the data format is "just EDN". Same with writing Docker semantics in JSON. It's very blurry.#2021-01-0422:03simongrayIt’s definitely blurry. I already have a disclaimer in the list about that
> In either case, a supposed DSL could just as easily be considered a creative use of existing language features or a particularly well-designed API.#2021-01-0422:04borkdudeThanks for the interesting discussion :)#2021-01-0422:04simongrayYou too. 😉 thanks for making cool stuff.#2021-01-0422:47simongray@U055NJ5CC @U04V15CAJ here’s where I ended up putting it https://github.com/simongray/clojure-dsl-resources#data-oriented-configuration#2021-01-0518:29Vincent Cantin@U4P4NREBY Minimallist is missing in the list.#2021-01-0519:11Vincent Cantin@U4P4NREBY Girouette might also be relevant for your list https://github.com/green-coder/girouette#2021-01-0601:01simongrayI added minimallist and vrac (under a new WIP section) since I found the idea really fascinating. On the other hand, I’m not really sure what girouette even does, so I left that out for now.#2021-01-0601:02simongray@U8MJBRSR5 https://github.com/simongray/clojure-dsl-resources/commit/361a6679e83d1389f8fdf7a3e0ebb86b1a32b2ec#2021-01-0601:04simongrayalso, your taiwan example in the diffuse readme made me chuckle 🙂#2021-01-0603:16Vincent CantinMinimallist, Diffuse and Girouette were all developed with the purpose if being useful for Vrac - that's the underlying bigger picture.
I will document and present Girouette next week, will send you the link once ready.#2021-01-0408:29emil0rhttps://github.com/emil0r/ez-wire updated to 0.2.1 and new fancy documentation/demo showing the library in action. I also made a very bad logo o_O#2021-01-0411:13henryw374https://github.com/henryw374/cljc.java-time version 0.1.12.
• the major news is that you get helpful error messages (which are lacking in java.time). This is yet another reason to prefer this lib over plain interop with java.time - blogged about here: http://widdindustries.com/why-not-interop/
• also removed is the use of compile-target macros - which should speed things up for babashka users #2021-01-0411:17borkdude(require '[babashka.deps :as deps])
(deps/add-deps '{:deps {cljc.java-time/cljc.java-time {:mvn/version "0.1.12"}}})
(require '[cljc.java-time.local-date :as ld])
(def a-date (ld/parse "2019-01-01"))
(ld/plus-days a-date 99)
$ time bb /tmp/jtime.clj
#object[java.time.LocalDate 0x35095813 "2019-04-10"]
bb /tmp/jtime.clj 0.03s user 0.02s system 89% cpu 0.049 total
#2021-01-0411:28henryw374cheers. yeah It's always going to be slower than (.parse java.time.LocalDate "2020-02-02") (about 3x on my machine) ,on bb because it has to interpret a bunch more code first etc#2021-01-0411:43borkdudewell, it's still fast :) and writing clojure can be more friendly#2021-01-0411:44borkdudeI see about 10ms speedup between .11 and .12 on my machine#2021-01-0411:46henryw374:thumbsup:#2021-01-0420:14slipsethttps://github.com/slipset/deps-deploy/ version 0.1.5
• support for -X, thanks to @rickmoynihan
• support for private s3 repositories, also thanks to @rickmoynihan
Thanks to @nichols1991 for pushing this release across the finish line and also for providing the upgrade to the s3-wagon dep so it also works with Java 10.
Any errors are mine.#2021-01-0508:35rickmoynihanThanks for getting this merged!#2021-01-0516:01mike_ananevNew version 0.1.3 of Context library. https://github.com/redstarssystems/context
Added:
• feature toggling. now component may have new status `:disabled`. During the system start any disabled components will be ignored (start/stop functions will not run). To disable a component just add to components' config map a key `:context/component-disabled`and `true` as a value.
• EmptyState. During the system stop, any stopped component now has state value as EmptyState class. This prevents poorly understood NPE if someone calls methods on the stopped component.
#2021-01-0516:16afryHello fellow Clojurians!
Sorry if this isn't channel appropriate, but I've got a "project" of sorts that I'm starting up this week. I'm embarking on a project called "12 startups in 12 months," which, as you may have gleaned from the title, is going to consist of building, promoting, and releasing a tech startup each month for a whole year.
I've been really keen on getting into Clojure for a long time now, and I'm finally taking the plunge and will be building all of the apps in Clojure and ClojureScript. Given that I'm more or less a beginner, it may take a little bit for me to get up to speed, but I'm banking that the quick learning curve for the language and the awesome flexibility and rapid development possibilities it has will work out in my favor in the end.
If you'd like to check out the stream, head over to my Twitch page: https://www.twitch.tv/a_fry_ . I'm streaming as we speak!#2021-01-0516:17wilkerluciohello, this channel has the focus on library releases, I believe #news-and-articles is a more appropriated channel 😉#2021-01-0516:18wilkerlucioaltough given its a project, feels like gray area, hehe#2021-01-0516:18afryAh great, thank you!#2021-01-0516:19afryYeah, I admit it treads a fine line, but I figure the focus on Clojure for the stream would make it an ok post. Appreciate the link#2021-01-0517:28pezAwesome project at that. Will be cool to follow. Never heard of serial entrepreneurship on this level. 😃#2021-01-0519:38simongrayGood luck. What’s your schedule gonna be like? Also why not announce it on https://www.reddit.com/r/Clojure/ too?#2021-01-0519:49afryI am streaming as we speak @U4P4NREBY! And I just added a schedule for future streams, which you can check out here: https://www.twitch.tv/a_fry_/schedule
So far I'm committing to 9:30 AM EST Monday-Friday, but I should have some afternoon sessions as well 🙂#2021-01-0519:50simongrayBut that is afternoon. Well, it is to me, it’s 15:30 CET 😉#2021-01-0519:52afryHaha, all the better. Maybe I'll get most of my viewers from EU countries when you all get off of work for the day.#2021-01-0617:02afryHey everybody, first day of livestreaming went very well! I've also set up a blog in the meantime if you're interested in following along with it. So far it's just a summary of the project and a link to the livestream, but I plan on making weekly updates as we get deeper into the process.
https://startupinamonth.net/livestream-is-up/#2021-01-0617:02afryI've also got slack channel that you can join if you'd like to follow along there as well: #startup-in-a-month#2021-01-0516:43Alex Miller (Clojure team)spec.alpha 0.2.194 and core.specs.alpha 0.2.56 are now available. the only real difference is bumping Clojure dep to 1.10.1. Importantly, spec.alpha is AOT compiled and this change from Clojure 1.9->1.10.1 also covers the Clojure compiler update to emit Java 1.8 bytecode instead of Java 1.5 bytecode. What does this mean for you? Hopefully absolutely nothing because the bytecode is essentially the same (other than stackmap frame stuff). We will be using these deps in Clojure 1.10.2. Generally, you should not need to do anything to get these deps as they are dependencies of Clojure itself.#2021-01-0606:25HuahaiReleased Datalevin 0.3.15, a simple, fast and durable Datalog database. This release introduced significant write speed improvement by using writable memory map and asynchronous writes. Writes can be two orders of magnitude faster for small transactions. https://github.com/juji-io/datalevin#2021-01-0608:58simongraydoes this make it faster than DataScript for writes now?#2021-01-0608:59simongrayAlso good job on the steady release schedule!#2021-01-0615:58HuahaiIt is now only slightly slower than Datascript for write transactions, as expected, for Datalevin writes to disk whereas Datascript is in memory.#2021-01-0615:59Huahai2s vs 0.5s#2021-01-0616:41simongrayNot too shabby! My comment was probably meant a little tongue-in-cheek. You seem very intent on getting good performance out of your various OSS projects. It’s very commendable.#2021-01-0617:27HuahaiThanks. Performance does matter for a lot of use cases, especially when dealing with data. What’s that saying? Database people care about three things: performance, performance, and performance. 🙂#2021-01-0609:02Chris McCormickHey all, just a quick note to let you know about this procedural MIDI melody generator I built with ClojureScript and am releasing today. https://dopeloop.ai/melody-generator Enjoy!#2021-01-0612:45borkdudeWe (@jeroenvandijk, @rahul080327, @valtteri and myself) are happy to announce the babashka aws pod!
Access AWS directly from babashka scripts with virtually no startup time, accessing all the services that the Cognitect aws-api lib provides access to.
https://github.com/babashka/pod-babashka-aws#2021-01-0613:13Ben SlessOne step closer to Clojure everywhere. Next stop - devops!#2021-01-0617:10fjolne@UK0810AQ2 btw we already have Ansible substitute https://github.com/epiccastle/spire#2021-01-0617:14jeroenvandijkYeah waiting for a spire pod so I can create a packer replacement 😅#2021-01-0617:43Ben Sless@UDQ2UEPMY I even had it starred!
I remember spire since it had a disclaimer back in the day, haven't been keeping track.
I'm just happy devops can now use babashka to whip up quick scripts, not just use a buy-in framework#2021-01-0618:16Jakub Holý (HolyJak)Whaaat? Is it Christmas already again?#2021-01-0618:34borkdudeIt's 2021!#2021-01-0618:37Ben SlessIt is Dec. 37th 2020#2021-01-0618:18Alex Miller (Clojure team)https://clojure.org/releases/devchangelog#v1.10.2-rc2 is now available. Changes from rc1:
• https://clojure.atlassian.net/browse/CLJ-2597 proxy should emit Java 1.8 bytecode
• https://clojure.atlassian.net/browse/CLJ-2599 Bump spec.alpha dep to 0.2.194 and core.specs.alpha dep to 0.2.56
Please report any issues (or success!) either in thread here or in #clojure - thanks!#2021-01-0618:51seancorfieldJust bumped our dev env to RC 2. Will let you know if anything weird happens.#2021-01-0701:43nnicholsHowdy! I’ve built a GitHub Action to check your deps.edn files for outdated dependencies, and to automatically create PRs for each upgrade.
Give it a try: https://github.com/nnichols/clojure-dependency-update-action
• Thanks to @tessellator for the original shell script this was based off of!#2021-01-0701:52ericdalloReally cool!
Does it checks for already open PRs by the GH action itself?
Otherwise, each push it'll open a PR? 😅#2021-01-0701:55nnicholsThe branch names for each old-version:new-version pair would be identical, and the github cli accurately prevents you from opening more than one PR against a single branch.#2021-01-0701:56nnicholsIt ought to log a message that the PR exists and move on to the next stale dependency iirc#2021-01-0702:28uochanCool!
I'll add a refence to antq's README (PR is also welcomed!)
https://github.com/liquidz/antq#github-actions#2021-01-0702:39ericdalloAmazing @UCZ5ZDJKF!#2021-01-0702:39ericdalloI'll try to add it to clojure-lsp later, thanks!#2021-01-0714:30benedekthat is nice#2021-01-0712:35ericdalloRelease version 2021.01.07-12.28.44 which adds a new "add-import-to-namespace" refactoring and if it's a common import `clojure-lsp` will suggest to add via code action 🎉
Check #lsp for more information#2021-01-0712:37borkdudeSome people have complained in #community-development about the frequency of some updates here for the same projects. I notice your last update was a week ago. I personally don't mind this, but for the people who do, I have made the #releases channel, to post smaller "in-between" updates. Just FYI. /cc @U45T93RA6#2021-01-0712:40ericdalloOh, good point @U04V15CAJ, sorry for that I thought this channel was exactly for that, but it seems a #releases would fit better, thanks for the heads up, I'll post there from now 😄#2021-01-0713:04pezPlease don’t stop posting here as well now and then. For me personally, I prefer quite often. (Even once a week 😄 ) Releases of tools that make Clojure coding better should be celebrated!#2021-01-0713:09ericdalloThank you @U0ETXRFEW! I'll probably try to merge features releases into a single release to avoid too many releases#2021-01-0713:14pezI think we shouldn’t keep value from reaching our users. But, yeah, finding a good balance in what this or that target audience is interested in hearing about is tricky. We learn as we go, I guess.#2021-01-0713:25borkdudeFeel free to do what you want, I personally don't mind, just thought I should mention #releases as well, just in case you want to use it ;)#2021-01-0715:08orestisWhat editor is this?#2021-01-0715:12pezAll the editors! 😃#2021-01-0715:13orestisHaha sorry I meant on the gif. Can’t tell if it’s a fancy vim or Emacs 😎#2021-01-0715:16pezI sort of knew you did. But had to pretend to not understand, in order to make the joke. 😃#2021-01-0715:17ericdallohahaha it's Doom Emacs @U7PBP4UVA, if you liked you can check my config on https://github.com/ericdallo/dotfiles#2021-01-0715:26borkdudeDoes it support doom-scrolling?#2021-01-0715:28ericdalloI don't know what is this doom-scrolling @U04V15CAJ :thinking_face:#2021-01-0715:29borkdudeIt is a new word I learned yesterday night#2021-01-0715:29pezMaybe it is this? https://www.wired.com/story/stop-doomscrolling/#2021-01-0715:32ericdallohahaha got it, yeah it's supports @U04V15CAJ 😂#2021-01-0803:41seancorfieldAs a general rule of thumb, if you can still see an earlier announcement about your project in the scrollback on #announcements you should post it in #releases instead. Once your last announcement drops off the scrollback, feel free to post in #announcements again.#2021-01-0722:50nnicholsIf you primarily maintain the version of your artifact in a pom.xml, I wrote a short GitHub action to respond to commit messages and perform the appropriate version bump against said pom. https://github.com/nnichols/maven-version-bump-action#2021-01-0803:41seancorfieldAs a general rule of thumb, if you can still see an earlier announcement about your project in the scrollback on #announcements you should post it in #releases instead. Once your last announcement drops off the scrollback, feel free to post in #announcements again.#2021-01-1019:21slipsethttps://github.com/clj-commons/byte-transforms is released at 0.1.35
This is the first release of byte-transforms under clj-commons, after it was transfered to clj-commons from ztellman.
Other than new coordinates, apache-commons/commons-compress was bumped to last version.
Also, versioning scheme has been changed to major.minor.commit-count.
Enjoy
Ps. this release is untouched by human hands, build, signing, and release to clojars all done on circle. I just pushed a release-tag to github.#2021-01-1307:51ingesolhttps://github.com/ingesolvoll/kee-frame got a new release (1.1.2), with very minor updates. Also, another reminder that kee-frame 1.x requires re-frame 1.x.#2021-01-1311:05RollACasterA month ago I announced a first minimal version of https://rollacaster.github.io/hiccup-d3/with only 2 charts. Now there are 14 chart types to build D3 charts in CLJS and some comfort features like D3 API-Docs per chart 📊📈
https://github.com/rollacaster/hiccup-d3#2021-01-1411:46Dainius Jocashttps://github.com/dainiusjocas/lucene-grep Lucene based grep-like utility compiled with GraalVM native-image. Grab a binary and tell me what you think. Cheers!#2021-01-1411:50borkdudewow, awesome :)#2021-01-1411:52Dainius Jocasthanks!#2021-01-1411:52borkdudeIf I do this in a Clojure repo:
lmgrep "select-keys" .
should this work? it turns up empty#2021-01-1411:53borkdudeI would expect it to search the dir recursively#2021-01-1411:54Dainius Jocasthe problem is with the . at the end#2021-01-1411:54Dainius Jocasas of now the file pattern is GLOB#2021-01-1411:54tvaughanSuper cool! Would it be possible to output the "score" associated with each match?#2021-01-1411:54borkdudethe problem with glob is always: is it recursive or not? this is always different per platform#2021-01-1411:55Dainius Jocas@U04V15CAJ if you specify then it is recursive#2021-01-1411:55borkdudethis also doesn't return anything for me:
lmgrep "keys" **/*
#2021-01-1411:56borkdudeOh I see:
lmgrep "keys" "**/*"
I should quote the glob pattern#2021-01-1411:56borkdudeyes, that works, perfect#2021-01-1411:57Dainius Jocas@U04V15CAJ yeah, put the GLOB in double quotes 😉#2021-01-1411:58Dainius Jocas@U0P7ZBZCK as of now it is not supported, but there is a Class in Lucene that does just that, so it is possible#2021-01-1412:00Dainius Jocas@U04V15CAJ for code search I'd suggest to specify the letter tokenizer, because the default analyzer doesn't split text on ., which is a bit unexpected IMO, e.g. lmgrep --tokenizer=letter "select-keys" "**.*"#2021-01-1412:01borkdudeyeah. it would be cool if the score was returned as @U0P7ZBZCK suggests and EDN output would also be nice, so you could sort the results (e.g. pipe the results to babashka and then do some processing)#2021-01-1412:06Dainius Jocas@U0P7ZBZCK,@U04V15CAJ, I agree that it would be nice to sort on score, but hint me how would you like the output to look like?#2021-01-1412:07borkdudeprobably just maps with :file, :line, :column, the line :text (optionally) and :score?#2021-01-1412:07borkdudeI would just output the maps on the fly, streaming, not wrapped inside a collection#2021-01-1412:08borkdudemaybe one map on each line#2021-01-1412:10Dainius JocasGot it. So I imagine it will be something like lmgrep --with-score "query" GLOB , i.e. under a flag#2021-01-1412:10tvaughanAssuming compatibility with grep isn't a concern and results are sorted by score: [SCORE]:[FILE_PATH]:[LINE_NUMBER]:[LINE_WITH_A_COLORED_HIGHLIGHT] . I personally don't have much of a preference. I could awk/cut the output easily enough. As @U04V15CAJ suggests, edn output would be super helpful#2021-01-1412:12borkdude@U0FT43GKV Maybe you can make this more flexible by allowing a --columns argument with a comma separated list of options, which also determines the order#2021-01-1412:13borkdudeor even better, a template:
--template "{{score}}:{{file}},{{line}}:{{column}}:{{text}}"#2021-01-1412:14borkdudeand you can have {{text}} or {{colored-text}} if you want one of both#2021-01-1412:14borkdudeor maybe --no-colors should just be an option#2021-01-1412:15Dainius JocasYeah, I was thinking about a template or a pattern as an option 👍 left it out for the first iteration#2021-01-1412:18borkdudeI support something similar in clj-kondo#2021-01-1412:19borkdudehttps://github.com/clj-kondo/clj-kondo/blob/master/doc/config.md#print-results-with-a-custom-format#2021-01-1412:20Dainius JocasNice! I'll shamelessly copy it as much as possible 😄#2021-01-1514:50tvaughanThat was fast, @U0FT43GKV! https://github.com/dainiusjocas/lucene-grep/commit/4e4556b7602e21aa4188f30c788e56e98a74220e 🔥#2021-01-1514:51Dainius JocasIt was not complicated 😄#2021-01-1514:52Dainius JocasHowever, the issue is that with the default Lucene I can get either Scoring of highlighting facepalme#2021-01-1514:53Dainius JocasI have to implement a class that does both 🙂#2021-01-1514:54Dainius Jocas@U0P7ZBZCK the feedback is welcome 😉#2021-01-1515:00tvaughan🙂 Scoring is more important to me. And normalization of scores too. From my prior experience with Elasticsearch, I remember that scores across indicies were not comparable. I'm hoping scores across different files are 🤞 Again, thanks for taking the time to create lmgrep, @U0FT43GKV#2021-01-1515:27Dainius JocasYeah, with elasticsearch score are not comparable not only between indices but also between fields within an index 🙂#2021-01-1515:29Dainius JocasThe scoring with lmgrep is with gotchas. As of now, every line is scored separately. Every line is treated as a document with one field. The temporary index is being created with that one document. Then the query is run against that temporary index.#2021-01-1515:36tvaughanInteresting. Thanks for sharing these details#2021-01-1611:08Dainius JocasI plan to write a blog post on the details in the coming week#2021-01-1417:15Alex Miller (Clojure team)It's that time of year again - the https://www.surveymonkey.com/r/clojure2021 is now open! We would love to get your feedback from all Clojure/ClojureScript/ClojureCLR users. Takes < 10 minutes and we release all the data. Please share with your colleagues who might not be seeing it in forums like these.#2021-01-1417:26mynomotoI wonder if babashka should be a dialect option.#2021-01-1417:34Alex Miller (Clojure team)I will make a note to consider for next year#2021-01-1417:42dharriganMay I suggest something too, or would you perfer another way of suggesting an addition?#2021-01-1417:48Alex Miller (Clojure team)here's fine#2021-01-1417:48dharriganCould you add in "Insurance" as an sector/industry for next year.#2021-01-1417:48dharriganhuuuge area 🙂#2021-01-1417:49Alex Miller (Clojure team)please add that as an Other response - I look at those every year and anything with high responses I add for the next year#2021-01-1417:49dharriganno problemo#2021-01-1417:50Alex Miller (Clojure team)Other for that particular question that is#2021-01-1417:50dharriganunderstood#2021-01-1417:50Alex Miller (Clojure team)I review all of those from prior year#2021-01-1417:50Alex Miller (Clojure team)Insurance was only mentioned 8 times last year in the other responses#2021-01-1417:55otfromif only there was some way you could have been ready for the risk and claimed some kind of compensation (sry, sry)#2021-01-1418:50pezNeed better tutorials / guides. For me it is rather “Need more tutorials / guides”.#2021-01-1505:20p-himikSeems like I don't know something but it's hard to find out about it.
Q24 lists both "Browsers" and "Chromium". Is there something named "Chromium" that's not a browser? Or was the intention to figure out how many people target Chromium specifically? If it's the latter, then why knowing that is important?#2021-01-1510:46dgb23I also think babashka should be in there! Mabye even clojerl?#2021-01-1513:53Alex Miller (Clojure team)as mentioned above, added babashka for consideration next year. I don't think anyone is actually using clojerl in anger.#2021-01-1513:54Alex Miller (Clojure team)@U2FRKM4TW I think Chromium can be used independently as a component? David Nolen requested that, can't remember now why#2021-01-1515:47p-himik@U050B88UR Could you please comment on the above? I'm genuinely interested but can't find any information.#2021-01-1511:56mpenethttps://github.com/exoscale/coax 1.0.0-alpha11 is out (bugfix release)#2021-01-1512:04mpenethttps://github.com/mpenet/alia 5.0.0-alpha3 is out
It adds supports for cassandra 4.x - the internals changed massively (tons of improvements), the surface api of alia is very similar to 3.x, it's still compatible with https://github.com/mpenet/hayt. Feel free to kick tires!#2021-01-1514:07Alex Miller (Clojure team)another reminder for those closing out the week in Europe... State of Clojure survey is open now! https://www.surveymonkey.com/r/clojure2021#2021-01-1516:02Alex Miller (Clojure team)https://twitter.com/richhickey/status/1350110634776657920#2021-01-1516:14bartuka... and now we are enlightened.#2021-01-1517:38hlshipYou realize his secret agenda will be to try and turn Clojure into Prolog, right?#2021-01-1520:44hlshipI mean, he did turn Scala into BASIC#2021-01-1520:49Alex Miller (Clojure team)he's been forgiven for that#2021-01-1516:22victorbHeya folks! I took all the advice I heard about networked Clojure REPLs and went straight for the other way.
Here's a project where the community gets to submit commands to be run in the REPL, and get to vote on other commands to be run.
Lot's of fun to create, only ~2 hours of programming.
You can find a screenshot here: https://twitter.com/VictorBjelkholm/status/1350114553342910468
Actual application is deployed here: http://livingthing.club/#2021-01-1517:37Ben SlessThis is like Twitch Plays but with a REPL. Groovy 🙂#2021-01-1519:09Alex Miller (Clojure team)https://clojure.org/releases/devchangelog#v1.10.2-rc3 is now available, only change was making some recent changes in the test suite platform-independent. Should be no changes since 1.10.2-rc2 as far as your perspective, but would be happy to have you re-try it regardless. If you do, please ✅ this announcement! If you have issues, please comment in thread or ask at https://ask.clojure.org#2021-01-2014:06Alex Miller (Clojure team)Good morning all! Just a reminder that the 2021 State of Clojure survey is open and we'd love to have your feedback! https://www.surveymonkey.com/r/clojure2021#2021-01-2019:18borkdudeClj-kondo v2021.01.20 ✨
New: unresolved var linter and various other improvements!
See https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#unresolved-var for details.
Release notes: https://github.com/borkdude/clj-kondo/blob/master/CHANGELOG.md#v20210120
Step by in #clj-kondo for questions.#2021-01-2019:20borkdude#2021-01-2312:17iarenaza@U04V15CAJ Docker image for this version seems to be missing in Docker Hub?#2021-01-2312:24borkdude@U8T05KBEW we moved Docker images to the cljkondo organization now instead of the borkdude org:
https://github.com/clj-kondo/clj-kondo/blob/master/doc/docker.md#2021-01-2319:59iarenazaWhoops! I hadn't noticed it. Sorry for the noise 😅#2021-01-2319:59borkdudeNo worries#2021-01-2021:37uochanJust released vim-iced ver 2.7.4, Clojure Interactive Development Environment for Vim8/Neovim.
https://github.com/liquidz/vim-iced
Support jumping to local vars!
This feature is powered by clj-kondo v2021.01.20#2021-01-2021:37uochanhttps://twitter.com/uochan/status/1352006866419650560#2021-01-2115:45mkvlrHey folks 👋 Happy to announce we’ve finally shipping nextjournal/clojure-mode a decent Clojure/Script editing experience in the browser, both on Nextjournal and as an open source extension for CodeMirror 6:
• :woman-juggling: https://nextjournal.com/try/mk/rule-30
• 🐙 https://nextjournal.github.io/clojure-mode/
• 📺 https://twitter.com/mkvlr/status/1352274315354529792
• 📜 https://nextjournal.com/blog/clojure-mode
I’ve you’ve played with Clojure on Nextjournal and found it meh, now’s the time to try again. Follow-up and questions in #nextjournal#2021-01-2118:43kwrooijenJust released a new version of Gungnir - A fully featured, data-driven database library.
https://github.com/kwrooijen/gungnir
This release adds two crucial features: Transactions and Migrations.
Both solutions are data-driven and are documented in the guide https://kwrooijen.github.io/gungnir/guide.html#2021-01-2118:50hlshipA brief glance looks to me like you've been getting idea from Elixir/Ecto?#2021-01-2118:51kwrooijenYep! Ecto is also mentioned in the README 🙂#2021-01-2212:51miroHi Clojure folks! 👋 Titanoboa 0.9.1 is out! 🎉
https://github.com/mikub/titanoboa
Most notable new features:
• Ability to suspend/resume workflow jobs
• Adding a new API endpoint to stop particular worker
• Ability for workers to self-initiate restart in case of a fatal error.
• Support for private s3 mvn repos#2021-01-2214:03jsyrjalaVery interesting. Can you schedule steps in the workflow? e.g run the next step of a workflow for example 7 days from now? For polling type of functionality.#2021-01-2214:43miro@U1G5P6G0L currently this is not there, but I have heard this type of requirement few times already so it might be worth adding.
Feel free to drop a note in the github discussions or submit an issue so as I won't keep lose track of it.#2021-01-3120:59firstclassfuncHello @U5L1P2D9U Just started digging into this really love it, was wondering if you think it makes sense to have a library of workload functions that can be created and used in the platform without require a customer library.#2021-01-3121:00miro@UMFRQDVU1 thanks, glad you like it!
I started putting some to this git repo:
https://github.com/mikub/titanoboa-tasklets#2021-01-3121:03miroI probably should add more, but then it is also super easy to create new ones.
Also you can do really lots of stuff with just the http client ( https://github.com/mikub/titanoboa-tasklets#http-client- ) - pretty much any API call you can do just by tweaking what url it should call...#2021-01-3121:03miroAlso if you create anything useful feel free to do a pull request.#2021-01-3121:04firstclassfuncI do want to compose my own and wrap some of the http calls since they aren’t always usable without some transformations. Seems that I have to write workload-fns as anon funcs instead of calling from a library of pre-build functions#2021-01-3121:05miroYou can do both, using a library fn is probably better/cleaner for production use#2021-01-3121:06mirowhile anon funcs are better for prototyping#2021-01-3121:06firstclassfuncok need to do more digging. Also how do you access REPL within the IDE?#2021-01-3121:07mirojust highlight what you need to execute and hit ctrl-enter#2021-01-3121:07miroobviously this can have side effects on the server side so should be used when you know what you are doing 😉#2021-01-3121:08miroand also auto-complete is ctrl-space#2021-01-3121:08firstclassfuncgot it.. super cool.. ❤️ this#2021-01-3121:08miroI probably should write it somewhere#2021-01-3121:11miroThanks! I am always super happy to hear from ppl using it because it is tremendously helpful to see what ppl use it for, what they like / what does not work etc., so feel free to let me know what you think after you've played with it for a bit - e.g. in here or on github discussions. Cheers!#2021-02-0113:58firstclassfuncHello @U5L1P2D9U Maybe you should setup a channel to discuss Titanaboa. I have noticed that http-client tasklet does not eval keys in properties e.g.
:basic-auth #titanoboa.exp/Expression{:value " [(:FWD_USER *properties*) (:API_TOKEN *properties*)] ", :type "clojure"},#2021-02-0114:04miroHi, this was broken awhile ago, should be fixed now, I will double check#2021-02-0114:05miroAnd yep, good idea with the channel, feel free to set it up or i will do it later#2021-02-0114:06miroAlternatively I always wanted to try github discussions, so we could move the chat there#2021-02-0114:08miro@UMFRQDVU1 feel free to paste there the whole workflow edn will look at it in the evening#2021-01-2214:52oliyI've just released pedestal-api 0.3.5
pedestal-api is a batteries-included library for building APIs in pedestal with auto-generated OpenAPI/Swagger documentation
https://github.com/oliyh/pedestal-api
This release updates all the dependencies, most notably the swagger-ui#2021-01-2214:56ericdalloReleased *https://clojure-lsp.github.io/clojure-lsp/ *of `clojure-lsp` with a lot of changes/fixes 🎉
This release removes all `clojure-lsp` parsing knowledge replaced by `clj-kondo` analysis/findings output.
For more info, check #lsp#2021-01-2216:02pezThis is huge. Super well done all you people doin' it!#2021-01-2216:58telekidDo you produce release notes? I’d love follow along.#2021-01-2419:36ericdalloWe don't have a CHANGELOG yet @UABU2MMNW I'm adding info on the release tag on Github for now, but soon I intend to crete a CHANGELOG 🙂#2021-01-2222:32hlship[ANN] com.walmartlabs/lacinia 0.38.0 and lacinia-pedestal 0.15.0
Lacinia is an open-source implementation of the GraphQL specification, in Clojure.
GraphQL is an outstanding approach to getting diverse clients and servers exchanging data cleanly and efficiently.
GitHub repo: https://github.com/walmartlabs/lacinia
Documentation: https://lacinia.readthedocs.io/en/latest/
Featured changes in 0.38.0:
- Support for Apollo GraphQL Federation
- New selection API to introspect the query, including type system and directives
- Correct compliance with the GraphQL specification with regards to errors and non-nullability
- Query variables may now be used inside input object and list literals
lacinia-pedestal adds support for accessing GraphQL as an HTTP endpoint
GitHub repo: https://github.com/walmartlabs/lacinia-pedestal
Documentation: https://lacinia-pedestal.readthedocs.io/en/latest/
Featured changes in 0.15.0:
- Enables request tracing by default
- Interceptors that add keys to the context now delete those keys on exit#2021-01-2317:32practicalli-johnPracticalli community tools user-wide configuration for Clojure CLI has been updated
• monthly updates of library versions in aliases for community tools
• promote calve to main aliases
• depstar to version 2.x (version 1 aliases prepended with -classic on alias name
• fix :alpha/hot-load commit sha (had been swiched to head commit by mistake)
https://github.com/practicalli/clojure-deps-edn#2021-01-2322:27mikethompsonre-com - there have been a series of releases in December and January, including:
• more consistent treatment of disabled? in all components, for UI that has to switch to a readonly mode
• added two "multi-select" widgets for different scenarios
• added two table components (Alpha ststus)
• it is now easier to style deep inside of components via "parts"
• added various PRs
• closed various issues
https://github.com/day8/re-com/blob/master/CHANGELOG.md
Demo app:
https://re-com.day8.com.au/#/tag-dropdown#2021-01-2400:19tony.kayGuardrails 1.1.3 is on Clojars. This release fixes a bug in async mode where errors were not being reported for Clojure. Clojurescript was not affected.
https://github.com/fulcrologic/guardrails#2021-01-2420:59vlaaadreveal New version of #reveal — https://vlaaad.github.io/reveal/ `1.3.193` — is out! For this major release I focused on providing a way to interact with Reveal window by submitting commands, allowing to easily build better IDE integration. You can learn more in the new readme section: https://vlaaad.github.io/reveal/#interacting-with-reveal-from-code
Here is a little demo using Cursive:#2021-01-2421:08borkdudeReleased babashka 0.2.8 with additional built-in libraries:
- core.match (much requested)
- clojure.test.check (prep for including spec once it comes out of alpha)
- hiccup (who doesn't use it?)
https://github.com/babashka/babashka/blob/master/CHANGELOG.md#v028
Hop by in #babashka for questions and complaints ;)#2021-01-2421:39pezWhere is babashka.sh? 😃#2021-01-2421:40borkdude@U0ETXRFEW this is called babashka.process#2021-01-2422:00pezYeah, babashka.process is wonderful. I confused things and meant to lob for babashka.fs.#2021-01-2422:01borkdude@U0ETXRFEW That lib is not done yet. I'm stuck on the glob function :/ If you want to help me, that'd be great.#2021-01-2422:02borkdudeIt is high on my list though#2021-01-2422:04pezglob happens to be what I most want to have. 😃 I would love to help, even if I doubt I know how to. How are you stuck?#2021-01-2422:07borkdude@U0ETXRFEW Check issue 4 and 5.#2021-01-2422:07pezI just have to share how I do it in lack of babashka.fs.
(defn glob [pattern]
(-> (shell/sh "bash" "-c" (str "ls " pattern))
:out
(#(when-not (= % "")
(string/split % #"\n")))))
Actually works pretty well.#2021-01-2422:08borkdudeso you are using the bash definition of glob. there are different defaults, recursive, not recursive#2021-01-2422:08borkdudesee https://github.com/babashka/fs/issues/5#2021-01-2422:11pezAre there difficulties in implementing the recursive version or is it more a matter of deciding which one to use?#2021-01-2422:11borkdudedeciding which one to use as the default, also, include hidden dirs by default or not?#2021-01-2422:13borkdudeI have a work in progress version in the glob branch which can be run only from clojure currently#2021-01-2422:13borkdudebecause I'm using java.nio.file.DirectoryStream which is not yet available in bb#2021-01-2422:14borkdudebut for testing, I would use that one#2021-01-2422:16pezCould it be an option? I think non-recursive makes a good default, if I can opt in on the recursion.#2021-01-2422:18borkdude@U0ETXRFEW That's what I've done in the glob branch:
$ clj -A:babashka.fs/dev
Clojure 1.10.2-alpha2
user=> (require '[babashka.fs :as fs])
nil
user=> (fs/glob "." "**/*.md")
[]
user=> (fs/glob "." "**/*.md" {:recursive true})
[#object[sun.nio.fs.UnixPath 0xdab48d3 "/Users/borkdude/Dropbox/dev/clojure/babashka/sci/CHANGELOG.md"]#2021-01-2422:18borkdudebut it might be a bit silly when searching for "**/*.md" to not have it recursive, since it won't match anything#2021-01-2422:29pezYeah. So that explains why some ignore files do not seem to work for me.#2021-01-2514:56Alex Miller (Clojure team)This is the last week for https://www.surveymonkey.com/r/clojure2021 - please fill it out if you use Clojure! Takes about 5 minutes.#2021-01-2520:08Michaël SalihiThx for the reminder...it's done!#2021-01-2516:00dmillettReleased clash 1.5.2 with a couple of new features:
• Integrated CSV parsing & automatic structuring with (transform-lines)
• Added type indicators for maps, vectors to clash.shape
https://github.com/dmillett/clash#parsing-csvs#2021-01-2518:28Jacob O'BryantHallway: find relevant discussions for a given URL. Supports HN/Reddit/Twitter so far, and PRs welcome.
https://github.com/jacobobryant/hallway#2021-01-2602:10eccentric JOoh could this be used to display like comments on a static page?#2021-01-2614:26Jacob O'Bryantnot as-is, but with a few patches, totally. we'd just need some more external api calls to fetch the actual comments for the discussions that are already listed.#2021-01-2619:38Alex Miller (Clojure team)Clojure 1.10.2 is now available! https://clojure.org/news/2021/01/26/clojure1-10-2#2021-01-2619:38Alex Miller (Clojure team)Changelog: https://github.com/clojure/clojure/blob/master/changes.md#changes-to-clojure-in-version-1102#2021-01-2619:41seancorfield#2021-01-2619:48Alex Miller (Clojure team)no changes since rc3#2021-01-2620:42Alex Miller (Clojure team)New Clojure CLI 1.10.2.774 is now available. No big changes, just defaults to 1.10.2 if no Clojure version is specified. https://clojure.org/releases/tools#v1.10.2.774#2021-01-2818:17slipsethttps://github.com/clj-commons/clj-yaml is out in version 0.7.106
• deploy to clojars is now automagic, and artifacts are signed
• Thanks to @skuro we now have support for namespaced keys#2021-01-2916:33Alex Miller (Clojure team)Ok, for real I am going to stop bothering you soon, but please fill out the State of Clojure 2021 survey TODAY! https://www.surveymonkey.com/r/clojure2021 Thanks in advance...#2021-01-2916:35borkdudeCan we win something?#2021-01-2916:36Alex Miller (Clojure team)yep, one lucky winner will get a jira ticket of their choice :)#2021-01-2916:36Alex Miller (Clojure team)you won't get a fix, just a jira :)#2021-01-2916:37borkdudebananadance#2021-01-2917:16pezStoked to see the results!#2021-01-2917:19Alex Miller (Clojure team)but you will all get my undying love and devotion 😜#2021-01-2917:35Aleksandershould people that were programming in Clojure for some time in the past, but not at the moment also fill it out?#2021-01-2917:39Alex Miller (Clojure team)sure!#2021-01-2919:28Alex Miller (Clojure team)@U01AVNG2XNF replying to your in-channel comment... I use similar Firefox version on Mac (but 10.15.7) with an ad blocker and it works fine for me. not really much I can do about it unfortunately.#2021-01-2919:33seancorfield@U01AVNG2XNF’s comment (since I'm going to delete it from the main channel) was: I'm probably way too late to the party here, but that survey doesn't render in Firefox (84.0.2) at all for me on MacOS 11.1, even with my ad blocker turned off — works fine on Safari. 😕#2021-01-2920:41Steven Deobald@U064X3EF3 Strange. But if I'm the only person who's noticed this it's probably a non-issue. 🙂 Sorry for the noise.#2021-01-2920:18seancorfieldhttps://github.com/seancorfield/depstar/releases/tag/v2.0.171 -- seancorfield/depstar {:mvn/version "2.0.171"} is available: the main change in this release is that pom.xml is no longer required when building an uberjar (much requested recently!). Follow-up in #depstar#2021-01-3009:25timo#2021-01-3013:05slipsethttps://github.com/clj-commons/spyscope is released at 0.1.48
Updated to deps to latest, and automagic deploy to clojars
There is some trickery wrt fipp and jdk > 8 which makes this lib a bit cumbersome to work with.
https://github.com/brandonbloom/fipp/issues/72
If anyone feels like giving a bit of love/maintainership to spyscope, please feel free to contact/open issues/PRs#2021-01-3022:01nnicholshttps://github.com/nnichols/clojure-dependency-update-action is now available at v3
This update adds a batch mode to create a single PR for all updated dependencies. Each dependency is updated on its own commit (You can always squash them), and the PR should automatically come with an itemized list of version changes.#2021-02-0113:31athosI’ve recently released two libraries: https://github.com/athos/power-dot and https://github.com/athos/type-infer.
• power-dot: A Clojure library that provides enhanced Java interop that allows you to treat Clojure functions as if they were Java lambdas
• type-infer: A development utility to inspect static types inferred by the Clojure complier
Give it a try!#2021-02-0204:47vemvenjoyed checking out both, particularly type-infer :)
wrt power-dot, merely as a musing: I don't find the reify examples so bad - they're concise enough and transparently reflection-free.
The main problem is probably discovery, e.g. it's hard/tedious to know in advance that .. (IntStream/range ...) can be auto-completed to filter, and that similarly, filter can be auto-completed to IntPredicate.
It seems plausible to me to conceive this as a problem that could be solved in https://github.com/alexander-yakushev/compliment (the lib that powers the auto-completion of CIDER et al).
Basically teaching it to understand functional interfaces + to emit completions that are more substantial than a single symbol (e.g. emit a whole (reify ...) as a completion)#2021-02-0209:04athosThank you for trying them out! I’m glad to hear that 😄
TBH I think method auto-completion is “too dynamic” a problem to solve with power-dot. As I mentioned a bit in the README, type-infer does type inference with the help of the Clojure compiler and due to that limitation, the target expression of type inference must be evaluated eventually. In this respect, infer is almost the same as eval:
(infer (println "hello"))
;; prints "hello"
;=> nil
If it’s acceptable to evaluate subexpressions, I think it’s much easier to simply call eval and check the runtime type of the value.#2021-02-0121:12Mark WardleHi all. I’ve built a new clojure-based library and microservice for SNOMED CT : https://github.com/wardle/hermes. This is a terminology useful in health and care applications. It’s the first of a series of composable libraries to provide some foundational healthcare system services, and my first real clojure product. Clojure’s been amazing in supporting this - I struggled to implement the expression constraint language or more complex logic in the prior versions of my SNOMED tooling - built either in Go or Java. Thank you to those who’ve built the software and libraries I’ve built upon!#2021-02-0122:19val_waeselynckLooks interesting! Maybe this is evident to insiders of the field, but I'm curious what is meant by "inference" here.#2021-02-0206:38Mark WardleThanks. Basically because SNOMED is an ontology we can use the relationships (triples basically) to infer that, for example, you have a type of neurological disease if I know you have Parkinson’s disease. But it isn’t limited to diagnostics but lots of different domains including occupations, countries, procedures, drugs etc. See https://www.snomed.org/snomed-ct/five-step-briefing I use in an EPR. #2021-02-0208:32borkdude@U013CFKNP2R We're using similar technology in our stack at https://covid19.doctorevidence.com/. Very interested to see what you did.#2021-02-0208:47JorinLooks pretty nice! Some day we might have to integrate with SNOMED as well and then this will be an invaluable resource to either use directly as a service or at least as inspiration 🙂 Thanks for sharing!#2021-02-0209:18Mark WardleThanks both. @U04V15CAJ - DRE looks interesting! Would be lovely to compose clinician-facing tooling for clinical patient management WITH tooling for making sense of clinical literature. Both are trying to make sense of too much information and both complement each other.#2021-02-0211:49val_waeselynck@U013CFKNP2R thanks. For people like me, "deductive inference" or "logical inference" would remove most of the ambiguity, as it would no longer be confusable with "statistical inference".#2021-02-0211:50Mark WardleHa! Ontological inference. But I do both statistical work and ontological work and have no difficulty swapping the meaning (pun intended) 😉 "Inference: the process of inferring something."#2021-02-0204:22seancorfieldFor anyone still using org.clojure/java.jdbc, I just released 0.7.12 to Maven Central. The only difference from 0.7.11 is that most of the protocols are now extensible via metadata making it easier to work with a wider variety of data types (just like in next.jdbc). Follow-up in #sql#2021-02-0218:40Yehonathan SharvitMy dear Clojure friends,
Developing in Clojure over the last 9 year taught me so many powerful general insights about programming.
I am writing a book called “Data-Oriented programming” in which I am attempting to share part of those insights with the global developer community.
The https://www.manning.com/books/data-oriented-programming?utm_source=viebel&utm_medium=affiliate&utm_campaign=book_sharvit2_data_1_29_21&a_aid=viebel&a_bid=d5b546b7 is available in early stage at https://manning.com.
Here is a 50% off discount code: mlsharvit2.#2021-02-0219:07caumondI recognize plantuml diagrams ! Good choice#2021-02-0220:19Yehonathan SharvitHehe!
Being able to have “source code” for diagrams motivates me to create lots of diagrams.
I don’t have to bother my mind with the look and feel of the diagram. I focus on the “logic” of the diagram.
Also, I have the ability to refactor diagrams across the whole project (e.g. fixing a typo or changing the case of a term…)#2021-02-0221:26deep-symmetryI love that you posted this, because earlier today I had posted a link to the book on our company’s internal Clojure Slack channel saying “This looks like a book about how to program as if you were using Clojure”! 😀#2021-02-0221:39caumondA use case I love also, being able to generate diagrams.#2021-02-0303:39eggsyntaxEnjoyed skimming it, especially this:#2021-02-0307:54Yehonathan SharvitFunny!#2021-02-0511:11David VujicPurchased the book and read the available chapters yesterday, I like it! :thumbsup: #2021-02-0616:12Yehonathan SharvitI am so happy. Spread the word among your friends!#2021-02-0616:13Yehonathan Sharvit@U018VMC8T0W Would you be interested in contributing to a Wikipedia article about
Data-oriented programming?#2021-02-0617:07David VujicSounds like fun and a good way to learn more about the subject 😄#2021-02-0617:52Yehonathan SharvitDefinitely. I have added you to #data-oriented-programming. There is a link there to the draft of the Wikipedia article and how you could contribute.#2021-02-0312:37pezA new version of Calva is out. Read here about what is new since we last announced a release: https://clojureverse.org/t/calva-coexistence-with-other-clojure-repl-extensions-improved/7110 Also feel super welcome to #calva to discuss its development and get help with using it.#2021-02-0318:36chrisnI am very proud to announce https://clojars.org/cnuernber/dtype-next. This major re-write of our Clojure high performance computing library targeting higher performance, wider platform support, and reduced code footprint.
https://github.com/cnuernber/dtype-next/ is a Clojure library that adds a coherent C/java integration, lazy functional, and high performance numerics, N-dimensional array programming, index space algorithms and high performance reductions. It works on JDK-8 through 14 and has partial JDK-16 and Graal Native support.#2021-02-0509:33miroHappy to announce that https://github.com/mikub/titanoboa is now being open sourced.
There is a new https://github.com/mikub/titanoboa/releases/tag/1.0.0-alfa.1 you can try. Read more at our https://github.com/mikub/titanoboa/wiki/Clustering .
This should make it easy for you to run tens or even hundreds of Titanoboa servers in one cluster 🎉#2021-02-0509:54caumondHi, I am very interested in your project, as I am in the process of designing something close to that (open, graphically sketchable, maybe modifiable, to orchestrate some treatements, manage their errors, decide what are the next steps, ...). I have a look and tell you !!#2021-02-0510:24caumondSmall improvement: it seems the docker image does not have the latest tag. So, in the installation guide docker run -d -p 3000:3000 --name titanoboa titanoboa/titanoboa should be docker run -d -p 3000:3000 --name titanoboa titanoboa/titanoboa:0.9.0 . Or add the latest tag on docker hub#2021-02-0510:25caumondThat said, it work on 3 minutes on my pc !#2021-02-0510:36miroThanks @U018QDQGZ9Q! I will fix that. I also still have to upload the latest Docker images (1.0.0-alfa.1 and 0.9.1), but they should be available soon.
Good to hear that it is working 🙂#2021-02-0510:31g7sI've just open sourced skidder a Drag and Drop ClojureScript library https://github.com/g7s/skidder#2021-02-0523:10uochanJust released antq ver 0.11.0, Tool to point out your outdated dependencies.
https://github.com/liquidz/antq
Added support to display diff URLs for outdated dependencies!#2021-02-0523:29seancorfieldThe tag for current version is not found:
Execution error (NullPointerException) at antq.util.maven/get-scm-url (maven.clj:97).
Cannot invoke "org.apache.maven.model.Scm.getUrl()" because "scm" is null
#2021-02-0523:30seancorfield0.10.3 works fine across our whole codebase (~110K lines of Clojure).#2021-02-0523:31seancorfieldShould I just create an issue on GitHub for this @UBL24PLE6?#2021-02-0523:32uochanYes, please. Thanks for your reporting!#2021-02-0523:48seancorfieldIf I get time, I'll send a PR. It looks relatively easy to fix.#2021-02-0600:07uochanI've released v0.11.1 for now.#2021-02-0600:26seancorfieldOh, wow, that was fast -- thanks! Testing now...#2021-02-0600:28seancorfieldConfirmed it works! Awesome!#2021-02-0600:36uochanThanks!!#2021-02-0616:39tony.kayFulcro 3.4.16 and Fulcro Inspect 3.0.4 were just released. This version fixes the Inspect Tool’s “Time Travel” feature, which got broken by various optimizations that made the history tracking much faster in development. The Inspect version will auto-update from Chrome store, but if you want to download it and manually install it, or you want to just use the websocket-based electron app you can find those in the Releases section of the Fulcro Inspect repository.
NOTE: The live DOM preview of the database time travel requires the update to Fulcro 3.4.16.
https://github.com/fulcrologic/fulcro-inspect/releases#2021-02-0705:30tony.kayI’m starting a new Playlist on YouTube titles “Grokking Fulcro”. This is a dual-purpose video series:
• Help existing Fulcro users understand the low-level details.
• Show common patterns. Fulcro does things differently than people expect, so knowing how to “think” about common problems requires some shifts that people often struggle with.
• Expose people less familiar with Clojure(script) to some of the superpowers you gain by using it.
First video just dropped. Here’s the playlist:
https://www.youtube.com/watch?v=3dZK5seIaVI&list=PLVi9lDx-4C_TBRiHfjnjXaK2J3BIUDPnf&index=1&ab_channel=TonyKay#2021-02-0706:25bedersgreat little intro to the magic behind react!#2021-02-0720:17Danny Almeidayou are a superstar 👏:skin-tone-3:#2021-02-0723:44genekimCan’t wait to watch it! Thanks, @U0CKQ19AQ!!#2021-02-0712:46ericdalloThe latest release of clojure-lsp clojure-lsp adds a new code action that suggest an alias to be required!
Also, recently we provided native binaries compiled with GraalVM graal-vm for Linux, MacOS and Windows 🎉
For more information, check #lsp#2021-02-0713:33borkdudeAnnouncing babashka.fs: https://github.com/babashka/fs
A file system utility based on java.nio with inspiration from http://clojure.java.io, clj-commons/fs and https://github.com/nate/fs.
This library can be used on the JVM and comes bundled with babashka 0.2.9 (just released).
Many thanks to the kind people here on slack for reviewing the initial alpha versions of this library.#2021-02-0804:17Alex Miller (Clojure team)Guaranteed Rate commercial during the Super Bowl had some Clojure on screen ... https://youtu.be/Nf0QvCq3quk?t=38#2021-02-0804:18Alex Miller (Clojure team)Not sure what editor that is?#2021-02-0804:21prertikLooks like vim(spacevim) to me.#2021-02-0804:29eccentric J#2021-02-0804:31andy.fingerhutCan anyone read it?#2021-02-0804:32eccentric JI can read parts of it 😅#2021-02-0804:46eccentric JIs Clojure famous now? 😎#2021-02-0805:10chuckleheadthis frame has a reasonably legible view of the left pane w/ create- and update-loan! functions, middle pane is some functions for rates, can't read anything on the right#2021-02-0805:52djblueThat's a lot of chrome tabs!#2021-02-0806:10chuckleheadI'll often have multiple instances with at least that many tab open and I think it makes my girlfriend physically ill when she happens to look over my shoulder#2021-02-0806:12chuckleheadon the other hand, the only thing on my desktop is my recycle bin and I'm suspicious of anyone who leaves documents and folders all over theirs.#2021-02-0806:20eccentric JOoh I just learned about the , and . keys on youtube to go back and forward a single frame. You can definitely get clearer screenshots that way!#2021-02-0806:42slipset“How did an underdog, always counted out, take down the biggest name?” I think Clojure was a reasonable choice of PL for this add. #2021-02-0806:20tony.kayGrokking Fulcro part 2 is now available:
https://youtu.be/102nHLzIbE4#2021-02-0810:16eccentric JEver want to use Clojure like it was PHP on cheap servers? Now you can by combining Babashka with cgi-scripts on shared hosts! Learn more about the process at https://eccentric-j.com/blog/clojure-like-its-php.html. See an example at https://cgi.eccentric-j.com/metal.clj. View the source, then discover some helpful scripts, docker-files, and hints at https://github.com/eccentric-j/clj-cgi-example.#2021-02-0810:17eccentric JMajor thanks to @borkdude and @U0K064KQV, would not have gotten to this point without your help!#2021-02-0810:38Tomas BrejlaDid you perform any benchmarks of such solution? I'd be a bit afraid of the fact that you need to spawn new bb instance for every single request (right?). And bbbinary is 70MB..#2021-02-0810:41Tomas BrejlaI mean I like the fact that it's possible to execute bb this way :thumbsup: , I'd just hope that people will not start trying to create full-blown webapps this way 😄#2021-02-0810:42borkdude@U01LFP3LA6P I'm not sure if the binary size matter for memory usage. E.g. bb -e '(+ 1 2 3)' give me:
max memory: 17516 MB
You can even set -Xmx as the first command line arg to bb if you are worried about this. For max performance CGI isn't the best solution. You will go to a proper HTTP server (babashka also has one btw) and probably run JVM Clojure. I think you should consider this an experimental approach for personal side projects / low traffic websites.#2021-02-0810:47Tomas BrejlaYes, the memory usage will be probably lower than the actual size of the binary. But still, even ~17MB per request is quite a huge overhead (when compared to handling a request in a long-running http server)#2021-02-0810:47Tomas Brejlayeah, babashka's httpkit server might actually give quite decent performance#2021-02-0810:51Tomas Brejlastill, Eccentric J's solution might be a nice alternative for many personal side-projects, where you need to quickly hack together some http-accessible scripts backed by clojure code and you're not limited by performance. It's nice that you don't have to keep any additional server running -> don't have to monitor its status etc.#2021-02-0810:53jeroenvandijkNice @U8WFYMFRU! I’m curious if you know https://github.com/alekcz/pcp and how you would compare it. I’m guessing your approach fully exploits the features in babashka whereas PCP is based on Sci, but not as fully featured as Babashka. PCP might counter the memory issues @U01LFP3LA6P mentioned#2021-02-0810:56borkdudeFrom the blog post:
> Github user alekcz (Alexander Oloo) has begun drafting PCP: A Clojure processor that runs a SCGI server that can act as a replacement for a long-running php-fpm process. This may not be best suited for a shared hosting service but would definitely be good for a VPS hosting service. I look forward to seeing it progress!
Afaik PCP also needs a JVM to run.#2021-02-0810:57jeroenvandijkYeah good point. Different approach then. Nice to see these developments anyway#2021-02-0810:58eccentric JYes found it the other day and linked to PCP in my article as an alternative. This solution with bb works with SimpleCGI. Where the script runs cold. PCP is more like FastCGI where there is a continuous process that a request client communicates with like how php-fpm works. You cannot run PCP on shared hosts, you will need at least a VPS.#2021-02-0811:00jeroenvandijkThanks for the explanation! And thanks for exploring this use of Babashka!#2021-02-0811:03jeroenvandijkNext step is to convince the php hoster companies to make babashka available on their servers 🙂 (I forgot the name for these companies 🙈)#2021-02-0811:07eccentric J@U01LFP3LA6P I did not benchmark it but I doubt it would be reliable. Shared hosts are unpredictable, like a bathroom shared amongst many roommates 😂 While editing it I probably refreshed the page in the triple digits and it certainly wasn’t the fastest but it’s loading < 1 s for me which is sufficient given that I’m loading bb, Postgres pod, running a query, transforming css with gaka, and html with hiccup. I wouldn’t launch an enterprise, high-availability service with it but it seems very promising for putting together some MVPs.#2021-02-0811:08eccentric JThe setup I am using for now is also the least optimized, might be a bit more performant to uberscript the entire project and run it through that as a single bundle and use carve to trim it down.#2021-02-0811:09borkdudeAnd then when you want to optimize it even further you can GraalVM compile it without using bb, or just produce static HTML for pages that don't need user input (if you want to continue going the CGI route)#2021-02-0811:16Tomas Brejla> I did not benchmark it but I doubt it would be reliable. Shared hosts are unpredictable,
Agreed. But one can still perform such benchmark on his local machine. Maybe someone will try it. It's not that important to do such benchmark. I was just curious, as I have no idea (nor a good estimate) of how poorly (or perhaps surprisingly well) this hacky-but-nice solution would scale. Maybe I'll try to benchmark this myself if I find some spare time.#2021-02-0816:49eccentric JThat would be great! I’d be interested in seeing how it’s done for the future. #2021-02-0816:50borkdudeI usually use multitime to test multiple invocations of a script#2021-02-0816:51borkdudee.g.:
$ multitime -n10 -s0 /usr/local/bin/bb tmp/meander.clj
===> multitime results
1: /usr/local/bin/bb tmp/meander.clj
Mean Std.Dev. Min Median Max
real 0.152 0.004 0.148 0.151 0.159
user 0.108 0.002 0.106 0.107 0.110
sys 0.041 0.002 0.037 0.040 0.045
#2021-02-0816:52eccentric JI see so create a script that creates a request and waits for a response then run it with multitime?#2021-02-0816:52borkdudeI think you should just test the script itself preferably#2021-02-0816:53borkdudeand not include other tools, to discount their startup time overhead#2021-02-0816:55eccentric JGood point#2021-02-0816:55kschltzbtw, Just loved to see Igorrr referenced in front page#2021-02-0817:54val_waeselynck@U8WFYMFRU I love this stuff. I've been really bothered by the infrastructure footprint of keeping live Clojure runtimes online, and this approach looks very promising.#2021-02-0818:35Shantanu KumarCould this idea be extended to run serverless scripts using bb?#2021-02-0818:37borkdude@U066J7E2U You mean like AWS Lambda-ish?#2021-02-0818:38Shantanu KumarYes, @borkdude#2021-02-0818:41borkdude@U066J7E2U I've seen several mentions of babashka on AWS Lambda. I think it works.
There's also a blog post about it here: https://www.jocas.lt/blog/post/babashka-aws-lambda/
@U0FT43GKV I think it's the first time I see this blog post.
Here is a specific setting for AWS Lambda: https://github.com/babashka/babashka#package-babashka-script-as-a-aws-lambda#2021-02-0818:41borkdudeThe blog approach might need updating, maybe best to discuss in #babashka. People like @U0JEFEZH6 have mentioned that you can now do this more easily perhaps without "layers".#2021-02-0818:50eccentric J@UNAPH1QMN 💯 I underestimated how difficult it would be to make a meaningful database for this example that demonstrates the power without it becoming overcomplicated. Fortunately I was listening to my Igorrr playlist at the time.#2021-02-0818:54eccentric J@U06GS6P1N I’m glad to hear that! There are many small side projects I can just start busting out now instead of having to plan a whole stack, deploy system, and cloud platform research. It’s amazing how big of a difference removing those decisions make.#2021-02-0906:31eccentric JAdded benchmarks to https://github.com/eccentric-j/clj-cgi-example#benchmarks#2021-02-0818:58Sam RitchieAnnouncing the 0.15.0 release of the #sicmutils computer algebra system for Clojure(script): https://github.com/sicmutils/sicmutils/
SICMUtils is a system built for interactive math and physics explorations in Clojure; it’s also got smoking fast numerical method implementations for when you do want to go fast.
The latest release is fully compatible with #sci , and therefore easy to add to any environment (#nextjournal anyone?) that uses SCI for clj(s) evaluation.
We’ve also upgraded the automatic differentiation implementation to handle higher order functions, and comparison and equality, so you can differentiate functions with internal conditional.
Lots more in the release notes here: https://github.com/sicmutils/sicmutils/releases/tag/v0.15.0 Thanks to @mkvlr, @borkdude and @hcarvalhoaves for your help and contributions in the latest release.
Please come say hi in #sicmutils if any of this sounds intriguing!#2021-02-0910:40slipsethttps://github.com/clj-commons/friend is released as clj-commons/friend version 0.3.193
This is a fork of Chas Emericks friend library.
This is basically 0.2.3 but with a version bump of jbcypt to avoid a CVE.
Please consider using https://github.com/funcool/buddy instead of friend, or as @borkdude put it:
“friends don’t let friends use friend”#2021-02-1004:10jumarIs the main reason to prefer buddy that the library is no longer actively developed?#2021-02-1004:35slipsetYes#2021-02-1107:33Vincent CantinThis announcement is rather peculiar: “Hey, here is a cool library, but don’t use it” 😉
It still makes sense.#2021-02-0913:23blueberryNew release of Deep Diamond: 0.18.0-alpha
High performance tensors and deep learning, in Clojure!
https://github.com/uncomplicate/deep-diamond#2021-02-0914:31Ertugrul Cetinoverload-fn is a tiny Clojure library that makes possible function overloading on types.
https://github.com/ertugrulcetin/overload-fn#2021-02-0915:04vemvIf the dispatch is limited to object, longs and doubles, I think one can reify a subset of these interfaces https://github.com/clojure/clojure/blob/140ed11e905de46331de705e955c50c0ef79095b/src/jvm/clojure/lang/IFn.java#L97-L454
(as few interfaces as needed, e.g. just two for two signatures)
reify supports dispatch-by-type, while implementing said interfaces would give you a callable thing
the result can plausibly perform a little better than a defprotocol/multimethod -based abstraction#2021-02-0915:58Ertugrul CetinI'll check this, thanks!#2021-02-0916:10vemv:) it could be a cool optimization. e.g. use these when possible but generally fall back to protocols/multimethods when not
...of course, very few apps will plausibly need such a thing#2021-02-0915:18Yehonathan SharvitWikipedia collaborators wanted!
I am working on writing a Wikipedia article about Data-Oriented programming.
If you are interested to collaborate, join #data-oriented-programming or send me a private message.#2021-02-0916:08kwrooijenHiccup-cli just arrived on MELPA! Convert HTML to Hiccup inside of Emacs with pretty printing (clipboard, kill-ring, directly in buffer). It does require you to build the GraalVM binary locally. I'll look into setting up CI/CD to build this automatically.
https://github.com/kwrooijen/hiccup-cli#2021-02-0916:11borkdude@UKFSJSM38 Is this something that could be integrated in clojure-lsp? Convert selection to hiccup <-> html? ;P#2021-02-0916:25ericdalloYeah, it could be implemented if hiccup-cli has an API to clojure-lsp, also some kind of function to detect if the cursor is inside a valid hiccup or html code#2021-02-0916:25ericdallo@UG9U7TPDZ about the CI, check the clojure-lsp CI which compile with graalvm 😄
https://github.com/clojure-lsp/clojure-lsp/blob/master/.github/workflows/release.yml#L47-L260#2021-02-0916:31kwrooijenWill look into that, thanks 👍#2021-02-0916:36kwrooijenAre you using Github's CI/CD?#2021-02-0916:36ericdalloYes#2021-02-1121:42kwrooijenJust got it set up, thanks @UKFSJSM38! Your repo was very helpful#2021-02-1121:43ericdalloNice 😄#2021-02-1113:04val_waeselynckhttps://clojureverse.org/t/building-a-community-for-sustainability-oriented-clojure-work/7159
Follow-up on ClojureVerse, Reddit, or in #community-development (I suppose that's the right channel for this, and that it's OK to publish this here, as it's arguably a kind of project)#2021-02-1114:03oliyHi everyone,
I've just released martian 0.1.15
Martian is an HTTP abstraction library for Clojure/script providing url construction, request/response coercion and validation and more via an extensible interceptor pattern based on Swagger/OpenAPI schemas or routes described as data
https://github.com/oliyh/martian
This release adds support for:
• Development mode - a martian instance can now be a function or a var that resolves the martian instance, giving a better REPL workflow https://github.com/oliyh/martian/issues/101
• Inline object definitions https://github.com/oliyh/martian/issues/100 and required field arrays on objects https://github.com/oliyh/martian/issues/102 (thanks https://github.com/evilsneer for reporting)
• An optional response validator which validates responses against the response schema
This release improves:
• Initialisation of martian.re-frame instances to avoid race conditions https://github.com/oliyh/martian/issues/95
• Documentation of martian.cljs-http initialisation#2021-02-1213:18timoAwesome project! Can I read a openapi.yaml as well? Or should I myself transform from yaml to json?#2021-02-1215:11oliyhi @U4GEXTNGZ thanks! no, it can't read yaml, so you either need to transform to json (hopefully 3rd party libs out there which will do it for you) or else directly into martian's internal clojure representation, but then you will probably duplicate quite a lot of the work that martian does for interpreting swagger.json#2021-02-1215:12oliythis only happens at bootstrap time so performance shouldn't really be an issue#2021-02-1215:12timoThanks @U076R6N1L#2021-02-1313:12borkdudeClj-kondo v2021.02.13 ✨
New: full support for core.match syntax!
And keyword analysis (used by clojure-lsp)!
Release notes: https://github.com/borkdude/clj-kondo/blob/master/CHANGELOG.md#v20210213
Follow up in #clj-kondo.
Happy linting!#2021-02-1410:31borkdudetools-deps-native: an experiment to run tools-deps natively, which allows for faster dependency resolving without a JVM.
https://github.com/borkdude/tools-deps-native-experiment
It works, but there are some issues so this should be considered experimental. Please do try it out though.
Pre-release binaries for macOS and linux:
https://github.com/borkdude/tools-deps-native-experiment/releases/tag/0.0.1-SNAPSHOT#2021-02-1417:13ilevdLeiningen plugin to sort namespaces in :require block with project namespaces priority https://github.com/ilevd/ns-sort#2021-02-1915:06mafcocinco@U04V15CAJ would it make sense to make something like this a function of clj-kondo?#2021-02-1915:07borkdude@U6SN41SJC clj-kondo has a linter for this. but clj-kondo will not edit your code. #lsp will though, I recommend trying that out!#2021-02-1915:07mafcocincocool! I will check it out.#2021-02-1418:29phillIs it like Slamhound (https://github.com/technomancy/slamhound)? "Slamhound rips your ns form apart and reconstructs it. No Dutch surgeon required."#2021-02-1419:05Vincent CantinIn this channel, please keep the discussions inside Threads.#2021-02-1420:18pezBecause posts in the channel get posted here and there over the web. 😃#2021-02-1422:04ilevdProbably not, it just sorts namespaces with projects namespaces priority#2021-02-1509:43vemvIt's more like https://github.com/gfredericks/how-to-ns but with one distinct feature (priority)
Btw you might be interested in separating the core feature from leiningen so it can be used from the repl. cljfmt, how-to-ns, etc, do this#2021-02-1420:32phronmophobicclirun: Run any function from the clojure cli
https://github.com/phronmophobic/clirun
# Write to a file using clojure.core/split
$ clj -M:run clojure.core/spit '"foo.txt"' '[1 2 3]'
$ cat foo.txt
[1 2 3]
# prn the return value by
# adding -p as the first argument
$ clj -M:run -p clojure.core/+ 1 2 3 4
10
# pretty print the return value by
# adding -pp as the first value
$ clj -M:run -pp clojure.core/macroexpand-1 '(time (+ 1 2 3))'
(clojure.core/let
[start__6153__auto__
(. java.lang.System (clojure.core/nanoTime))
ret__6154__auto__
(+ 1 2 3)]
(clojure.core/prn
(clojure.core/str
"Elapsed time: "
(clojure.core//
(clojure.core/double
(clojure.core/-
(. java.lang.System (clojure.core/nanoTime))
start__6153__auto__))
1000000.0)
" msecs"))
ret__6154__auto__)#2021-02-1512:09Yehonathan SharvitJohn Lennon a Data-Oriented programmer ?
Imagine - same music, new lyrics.
Performed by https://twitter.com/wilkerlucio
https://www.youtube.com/watch?v=EDRRbuWuUbQ#2021-02-1515:13borkdude@U066U8JQJ Even Rich liked it. Life goal accomplished?#2021-02-1515:14wilkerluciototally 😁#2021-02-1515:21borkdudebtw, a bit off topic, can you recommend a video tool to add those call outs? I'm a n00b in this area but I'd like to know how to do this easily#2021-02-1515:22wilkerlucioI used Screenflow, but mostly because its the thing I use for screencasts in general, and it has some basic video editing capabilities#2021-02-1515:23borkdudethanks#2021-02-1515:23wilkerlucioI do recommend that as a general screencast recording/editing app, but if it was just for adding subtitles, there are probably better options#2021-02-1515:58Yehonathan SharvitIt feels awesome to have my lyrics liked by Rich Hickey! Thank you @borkdude for the tweet that triggered the like.#2021-02-1515:59Yehonathan SharvitIt feels awesome to have my lyrics liked by Rich Hickey! Thank you @borkdude for the tweet that triggered the like.#2021-02-1516:32borkdude@U066U8JQJ Screenflow is such an easy tool. I had used version 5 years and years ago. Upgrading now costs me 79 dollars instead of the full price. I'll consider it.#2021-02-1516:53seancorfield@U0L91U7A8 Just a reminder: #announcements is intended for library announcements (per the channel topic) -- stuff like this better belongs in #news-and-articles#2021-02-1516:53borkdudeIt would be very convenient if Slack supported "move thread to ..."#2021-02-1517:01Yehonathan SharvitThank you for the reminder @U04V70XH6 .
Acutally in the channel topic I see also a mention about Projects. Maybe we could consider this song as a “project”?#2021-02-1517:04seancorfieldYeah, I'm not going to say "delete that and post it elsewhere" but I wouldn't want to encourage others to post videos and blog posts here 🙂#2021-02-1517:06borkdudeBtw, there is also a #music channel :)#2021-02-1517:56Yehonathan SharvitThank you @borkdude and @U04V70XH6#2021-02-1518:24jjttjjNow do "Mother" but "Java" 😛#2021-02-1519:31Yehonathan Sharvitwhat do you mean @U064UGEUQ?#2021-02-1519:32seancorfieldPink Floyd's "Mother" from "The Wall" I suspect...#2021-02-1519:32borkdudeOr a song by John Lennon? I am unfamiliar with that song, but since Imagine is by Lennon too...#2021-02-1519:43jjttjjYeah sorry was Lennon's "Mother" which got stuck in my head after watching the Imagine vid for some reason#2021-02-1519:44jjttjjBut on further reflection is maybe a little dark to parody idk#2021-02-1519:45seancorfieldPink Floyd's Mother^H^H^H^H^H^HJava:
Hush now, baby, baby, don't you cry
Java's gonna make all of your nightmares come true
Java's gonna put all of her fears into you
Java's gonna keep you right here, under her wing
She won't let you fly, but she might let you sing
Java's gonna keep baby cosy and warm
(perhaps even more dark than Lennon's song? 🙂 )#2021-02-1519:46borkdudeOne man's Java is another man's Clojure#2021-02-1522:32miro@U04V70XH6 and that brings us to:
We don't need no object mutation...#2021-02-1609:05olyis this the new way to promote programming languages remixing old songs 🙂#2021-02-1612:21Yehonathan SharvitI hope so!#2021-02-1515:59Yehonathan SharvitIt feels awesome to have my lyrics liked by Rich Hickey! Thank you @borkdude for the tweet that triggered the like.#2021-02-1614:35katoxPGMig 0.6.0 is out!
What's new:
• More complete support for next.jdbc
• Improved json and jsonb support by including PGObject jdbc extension
• Updated to GraalVM 21.0.2.
• Updated Clojure and dependencies
• Docker image is based on the new graalvm/graalvm-ce base
Release notes: https://github.com/leafclick/pgmig/blob/master/CHANGELOG.md
Since this release you can even grab pre-built binaries for Linux/Mac/Windows here: https://github.com/leafclick/pgmig/releases/tag/v0.6.0
Docker images available at Dockerhub: https://hub.docker.com/r/leafclick/pgmig/tags?page=1&ordering=last_updated
Special thanks to @borkdude for SCI!
Kamil#2021-02-1615:33Alex Miller (Clojure team)Clojure https://clojure.org/releases/devchangelog#v1.10.3-rc1 is now available
• Reverted https://clojure.atlassian.net/browse/CLJ-2564 (case error message change from 1.10.2) - this change introduced a new var invoked from the code emitted by the case macro. This has compatibility issues in the case of aot compiling on 1.10.2, then using that compiled code with prior Clojure runtimes (where the var will not exist). Reverting this is the reason we have reopened Clojure 1.10.x. All changes from prior releases back to 1.8 were audited for this kind of issue, none were found.
• https://clojure.atlassian.net/browse/CLJ-2453 Allow reader conditionals in prepl - thanks to Oliver Caldwell for the patch
We do not expect any other changes in 1.10.3. Any help vetting this release would be appreciated prior to 1.10.3 release.#2021-02-1615:34Alex Miller (Clojure team)I hit the button slightly too soon here, release is actually not yet on maven central but it's on the way#2021-02-1615:41Alex Miller (Clojure team)ok, now available#2021-02-1617:03seancorfieldKicking off a full test suite run here with 1.10.3-rc1 but I would be shocked if it changes anything for us 🙂#2021-02-1617:57Alex Miller (Clojure team)yeah, probably actually more useful to check for anything unexpected with prepl based tooling (like REBL)#2021-02-1618:18seancorfieldI'm not using anything with a prepl right now, just the plain socket repl. I have it on my todo list to investigate Reveal's prepl chaining feature (but until I can persuade Chlorine/Clover to connect to a prepl that's pretty much on hold). I'll follow up in #clojure-dev with a question about that though...#2021-02-1712:13mpenethttps://github.com/exoscale/coax 1.0.0-alpha12 is out
It's a small bugfix release (double coercion in a particular case with s/merge forms)#2021-02-1821:29mogenslundScreencast of my setup in the newest version of https://github.com/mogenslund/liquid https://www.youtube.com/watch?v=-MC0P4rj3e8#2021-02-1910:13henryw374my new starter project for creating a todo list app with re-frame and firebase: https://widdindustries.com/clojurescript-firebase-simple/. feedback welcome 🙂#2021-02-1910:44vlaaadI think this belongs to #news-and-articles — this channel is for project/library announcements only#2021-02-1910:47henryw374ok thanks#2021-02-1910:49henryw374I guess it does announce a starter project for cljs+firebase but point taken#2021-02-1917:29Steven KatzIs the “todo app” the “hello world” of the 21st century?#2021-02-2109:05henryw374😉 in the old days you felt like you'd really achieved something when you got to hello world with things like public static void main.. .
clj -e '(println "Hello, world")' is just boring#2021-02-2717:39valsenYour code and blog post has been a huge help for me in setting up firebase auth for my own project, so thank you so much! However, I’m borrowing aspects from yours as well as from the source code of the deg/re-frame-firebase library, and am having trouble with compiling using default compiler optimizations :advanced. It apparently removes too much of the js code so that I get messages like Cannot read property 'getIdToken' of null because firebase doesn’t initialize properly. Works fine fith :simple optimizations, and I’ve tried adding ^js hints in the same places as your code does, which helped with a few of the errors but not all.
Any suggestions what I could try?#2021-02-2718:13valsenMore specifically, it actually seems to initialize firebase, but fails to initialize the google sign-in constructor. firebase.auth.Xx is not a constructor#2021-02-2718:38valsenFollowing the directions at https://shadow-cljs.github.io/docs/UsersGuide.html#externs I just tried creating an externs/app.txt file and added a single line with the word GoogleAuthProvider and that seems to have done the trick! Now that constructor keeps its name instead of being renamed to Xx.
I still don’t know why that specific name couldn’t be auto-inferred, but the solution/workaround is so simple that I can live with it:)#2021-02-2806:57henryw374Glad you got it sorted. As I have it in my project, that line is (`js/firebase.auth.GoogleAuthProvider.)` , so has no hint. I imagine in that case bc the compiler sees it refers to a global object it is left as is.#2021-02-1920:40Alex Miller (Clojure team)https://clojure.org/releases/tools#v1.10.2.790 is now available
• Add -version and --version options (same as java)
• https://clojure.atlassian.net/browse/TDEPS-56 - Fix main-opts and jvm-opts word splitting on spaces (goodbye Corfield comma!)
• https://clojure.atlassian.net/browse/TDEPS-125 - Use JAVA_CMD if set (thanks Gregor Middell!)
• Add warning if :paths or :extra-paths refers to a directory outside the project root (in the future will become an error)#2021-02-1921:46phronmophobicAre you tired of web browsers pushing you around? Dictating your workflow? Requiring your tools to run in the browser rather than the other way around?
Take control with https://github.com/phronmophobic/clj-cef, Clojure bindings for the Chromium Embedded Framework.
* Embed an HTML5-compliant Web browser control in an existing native application.
* Create a light-weight native “shell” application that hosts a user interface developed primarily using Web technologies.
* Render Web content “off-screen” in applications that have their own custom drawing frameworks.
* Act as a host for automated testing of existing Web properties and applications.
All from the comfort of your local repl. Act now, and get anhttps://github.com/phronmophobic/clj-cef/tree/main/examples/htmltoimage absolutely free!
https://github.com/phronmophobic/clj-cef#2021-02-1921:47phronmophobicApache2 License terms and conditions may apply. Mac OSX only. Incorrect usage may crash your jvm.#2021-02-2102:26seancorfieldseancorfield/depstar {:mvn/version "2.0.188"} is available on Clojars -- https://github.com/seancorfield/depstar -- :compile-ns now allows regex to match namespaces (thank you, @iagwanderson), :jvm-opts lets you pass JVM options to the compile process (e.g., for direct linking), :compile-fn let's you override the compile step if you need something custom (such as when building cljfx apps), ignores .DS_Store files, treats JAR files as ZIP files which should be more robust in the face of strangely constructed JAR files. 2.0.188 fixes a bug with :compile-ns :all introduced in 2.0.187#2021-02-2102:50eggsyntaxI hadn't seen the logo until just now, that's really funny 😂#2021-02-2104:17seancorfieldI'm not sure who is responsible for that at Health Finch long before I took over the library. Maybe Danielle Kefford? She committed both that logo and an earlier logo...#2021-02-2110:36bartukaNice, thanks @U04V70XH6#2021-02-2214:07ghadiYup it was made by @U04V52NKN#2021-02-2218:26Sam RitchieAnnouncing v0.16.0 of #sicmutils, the extensible Clojure(script) computer algebra system with excellent support for all of your advanced classical mechanics and differential-geometric needs. (Geometric algebra support coming soon!) Come say hi in #sicmutils.
This release added new functions and generics like floor, ceiling, integer-part and fractional-part that render well to TeX and work in the symbolic environment (thanks @darrickw!) Many other improvements are coming together to make this library smoking fast at numerical computation and expressive in interactive environments.
• release notes here: https://github.com/sicmutils/sicmutils/releases/tag/v0.16.0
• fresh cljdoc build: https://cljdoc.org/d/sicmutils/sicmutils/0.16.0/doc/introduction
• clojars: https://clojars.org/sicmutils/sicmutils
If you’re interested in this sort of thing, we’re also running a study group for Sussman’s “Structure and Interpretation of Classical Mechanics” starting this wednesday: https://clojureverse.org/t/scicloj-study-group-sicmutils/7118#2021-02-2218:29Sam Ritchiethis is an example (a very dense example, more friendly examples coming soon!) of the sort of symbolic investigation that #sicmutils allows into classical mechanics phenomena: https://nextjournal.com/samritchie/sicm-ch1-ex1-21#2021-02-2218:29Sam RitchieRunning live in the browser, no less!#2021-02-2219:18seancorfieldhoneysql "1.0.461" -- this includes an important security bug fix for a potential SQL injection vulnerability so I would recommend anyone using 1.0.444 (or earlier) upgrade to this latest version https://clojars.org/honeysql/versions/1.0.461 (note: this vulnerability did not affect the 2.0.x version currently in alpha testing!) -- all follow-up in #honeysql#2021-02-2221:12nijsselsAnnouncing an experimental rule engine with the working title Implify.
It's a rule engine, where, using a DSL, rules expressed as predicate-groups result in an inferred typed data structure that can be evaluated within the web-app or as an API using JSON as input.
Written fully in Clojure(Script) it leans heavily on the dynamic and lispy nature of Clojure. It is closed source however, but can be experimented with in a web application available at:
https://www.implify.eu
Rudimentary docs and a pretty functional "playground" available at that location.#2021-02-2221:51borkdude@U2HDPM5FH If you are Dutch, which it sounds like, you might be interested in joining #clojure-nl. If you want to do a presentation about this at the Dutch Clojure meetup, could be nice maybe#2021-02-2221:56borkdudeAh you are already part of that channel :)#2021-02-2304:29kimimSo Michiel, you are Dutch?#2021-02-2307:45nijssels@U04V15CAJ Yeah, I'm indeed Dutch. Never been to the meetup, although I keep up with the sessions and subjects. About giving a presentation: perhaps after COVID-19 and all the lockdowns.#2021-02-2308:00borkdudeThe meetup is online now. And yes @U011J2CQT0F , I’m Dutch #2021-02-2306:49tony.kayI continue to add episodes of Grokking Fulcro on YouTube. I’m up to part 5. These videos are more oriented to the nuts and bolts of “how it works”, which I personally always appreciate knowing when I’m working with tools. If you’re new to Fulcro be sure to check out other resources that are more aimed to beginners, such as the Developer’s Guide and tutorial videos.
The playlist for the new (nuts and bolts) series is https://youtube.com/playlist?list=PLVi9lDx-4C_TBRiHfjnjXaK2J3BIUDPnf#2021-02-2316:59Vincent Cantin@U0CKQ19AQ This channel is for library and project announcements. The video and articles may go to #news-and-articles instead.#2021-02-2318:02tony.kayAh, I did not realize there was a separate channel for that#2021-02-2308:51mikethompsonre-com v2.13.0 A component library for Reagent
Headline:
1. Substantially improved debugging features https://re-com.day8.com.au/#/debug
2. Continued evolution of the two new table components. https://re-com.day8.com.au/#/v-table
Full changelog: https://github.com/day8/re-com/blob/master/CHANGELOG.md#2130-2012-02-23
Next step: easier component skinning#2021-02-2309:00p-himikAwesome!
Re. :require-macros and at - AFAIK, using :require-macros is pretty much outdated by now unless you're the author of that macros NS: https://code.thheller.com/blog/shadow-cljs/2019/10/12/clojurescript-macros.html
In short, it's possible to let your users just use (:require [re-com.core :refer [at h-box v-box ...]]).#2021-02-2309:02mikethompsonThanks, we'll have a look#2021-02-2321:53blak3mill3rA very fine library, I look forward to checking out the new debug features#2021-02-2412:12mikethompson@U2FRKM4TW fixed, thanks#2021-02-2309:36emil0rez-wire 0.4.0 has been released. More updates to form. Documentation can be found here: https://emil0r.github.io/ez-wire-docs/#2021-02-2314:21Alex Miller (Clojure team)https://clojure.org/releases/tools#v1.10.2.796 is now available
• Fix incompatiblity with Cursive in 1.10.2.790 (also fixed in latest Cursive) - apologies on this one
• Fix clj -X:deps git-resolve-tags to update the sha to match the tag if both are provided
• Perf improvements for git or local deps using pom.xml#2021-02-2317:42Jakub Holý (HolyJak)awesome, thanks!#2021-02-2403:20lambduhhhEver heard of [[networked thought]] or [[zettlekasten]]? Super fascinating and effective ways to keep track of your brilliant ideas! :)
Check out our awesome tool for organizing and easily referencing all your most useful thinker thunks. The ones that flutter by, escaping our brain right when we most need them.
Locally hosted, open source desktop app built in .cljs, reagent, reframe and datascript.
The Gates of Athens are open! Free desktop available to everyone, with additional tiers through OpenCollective.
Try the web demo (no changes saved) at https://athensresearch.github.io/athens
Desktop download links:
- Mac: https://tinyurl.com/athens-mac
- Windows: https://tinyurl.com/athens-windows
- Linux: https://tinyurl.com/athens-linux#2021-02-2403:24seancorfieldThis is the open source "competitor" to Roam?#2021-02-2403:28jeff tangOne way to put it @U04V70XH6 #2021-02-2403:41Steven DeobaldI'm curious what warrants the scare quotes.#2021-02-2403:46seancorfieldBecause I don't know enough about either project to know whether they are truly competitors or not.#2021-02-2406:03Steven LombardiBesides Roam and Athens, are there any other similar solutions out there?#2021-02-2406:19Steven LombardiReading up on this stuff, I'm reminded of Notion.
https://www.notion.so/product#2021-02-2406:19Steven LombardiNot quite the same problem space but there's definitely overlap.#2021-02-2406:35Steven LombardiA few other notables for discussion:
• https://www.remnote.io/
• https://logseq.com/
• https://obsidian.md/
• https://github.com/foambubble/foam
• https://dendron.so/#2021-02-2407:55ordnungswidrigYou can also zettelkasen with org-mode https://blog.jethro.dev/posts/zettelkasten_with_org/#2021-02-2409:24emil0rDoes Athens support exports?#2021-02-2409:31Aleksanderthere is also https://twitter.com/codexeditor#2021-02-2409:31Aleksanderhttps://www.patreon.com/codexeditor#2021-02-2409:33Aleksanderre Athens exports: you can have a db backup, so I guess that counts as export#2021-02-2409:55dharriganI think athenresearch is pretty nice and lovely! A good showcase for another thing possible with clojurescript! well done @UMA337M3P!#2021-02-2410:22Jakub Holý (HolyJak)Where do I find some intro docs for Athenresearch? E.g. to learn what ((block references)) is? Is there any support for formatting (e.g. markdown)? thanks!#2021-02-2410:39Jakub Holý (HolyJak)Ok, found the Welcome page in the app 🙂#2021-02-2415:56ChaseAthens was recently accepted into Y-Combinator too. It'll be neat to see how they approach open source with commercial success which is a big topic in the zeitgeist#2021-02-2417:10jeff tanglooking to make seamless interop between datascript<>markdown. currently just datascript 🙂 @U0545PBND @UA2R84M28#2021-02-2417:12jeff tangsupport a subset of markdown right now @U0522TWDA. it's likely we go for full markdown but also many users are non-developers, in which case a WYSIWYG would make more sense for them#2021-02-2417:13Jakub Holý (HolyJak)One thing I did not get - can I post links to external content, as I would in .md do with [my title]() ?#2021-02-2417:14jeff tangyes#2021-02-2417:29eccentric JI had made a visual to help explain zettelkastens more https://clojurians.slack.com/files/U8WFYMFRU/F01N8D0SX5F/zettelkasten.pdf (still a rough draft) and there’s some other discussion about it in https://clojurians.slack.com/archives/C03RZGPG3/p1613078474271900.#2021-02-2417:38eccentric J@UR0KX1MRT I use Notion for my zk but org-roam is another great option for emacs using org-mode.#2021-02-2409:07jonpitherCrux 1.15.0 is out 🚀 🎉
• We've made the Java API for submitting transactions much more IDE-friendly - Java users can now construct transactions programmatically through the new Transaction APIs.
• Another oft-requested feature: queries can now return maps, using the `:keys`/`:syms`/`:strs` syntax
• Bugfixes - and more details at https://github.com/juxt/crux/releases/tag/21.02-1.15.0
Thanks 🙂 Have a scout of the #crux channel for more on this release.#2021-02-2409:53kimimJust create a very simple ECharts lib, welcome to have a try: https://github.com/kimim/re-echarts#2021-02-2411:08borkdudedeps-infer:
Infer mvn deps from sources.
https://github.com/borkdude/deps-infer
Thanks @hiredman for the idea. For now this is just a POC but I thought it would be cool to share in case anyone wants to contribute.#2021-02-2411:12p-himikI'm curious - what might be some of the use cases? I can only think of somehow losing deps.edn.#2021-02-2411:16borkdude@U2FRKM4TW For babashka scripts this could be useful if you want to port your script to the JVM and you want to compile it with GraalVM for example#2021-02-2411:18p-himikAh, nice, thanks!#2021-02-2411:33borkdudeThis can also be useful when you want to compare the newest deps in your .m2 with the ones you already have. Or when you want to migrate your git libs to mvn ones :)#2021-02-2411:51flowthingI imagine it could also be useful if you use clojure.tools.deps.alpha.repl/add-libs to hot-load dependencies and you want to save your state into a deps.edn file.#2021-02-2411:55borkdudeThis can also be a useful addition to clojure-lsp. Type (:require [clojure.tools.cli]) and it will be interactively added to deps.edn. cc @UKFSJSM38#2021-02-2412:11ericdalloLooks valid, not sure what's version would add in deps.edn though#2021-02-2412:29ericdallooh got it, that's deps-infer responsibility, really nice#2021-02-2412:36borkdudeI found another nice use case: you want to port a lein project to deps.edn (but don't want to rewrite the project.clj yourself)#2021-02-2412:37borkdudeor a boot build.boot file (which is arguably harder because of code instead of config)#2021-02-2412:43ericdallooh, that I could use on clojure-lsp itself 😆#2021-02-2412:46vemvExtra use case (and long wanted one!): making implicit dependencies explicit
e.g. maybe I'm actively using math.combinatorics in my project, but it's in my classpath because it's a transitive dep of some other dep.#2021-02-2412:46borkdudeAnother use case: see which deps you are actually NOT using in your original deps.edn#2021-02-2413:15p-himikAlthough this can give false positives when you wanted to pin a particular transitive dependency to a particular version or include some plugin that some other dependency (or your code) uses dynamically.#2021-02-2413:21borkdudeif you wanted to pin that version, why not include it explicitly with that version?#2021-02-2413:21borkdudeyeah, false positives can happen, this is probably why you should manually review the output#2021-02-2413:37p-himik> if you wanted to pin that version, why not include it explicitly with that version?
That's what I meant.
Your project is using lib /cdn-cgi/l/email-protection which uses /cdn-cgi/l/email-protection
You know that /cdn-cgi/l/email-protection has a bug that's been fixed in /cdn-cgi/l/email-protection that's backwards compatible with /cdn-cgi/l/email-protection
Naturally, you include the /cdn-cgi/l/email-protection in your deps even though your project never uses it directly.
Perhaps, deps-infer deals with that already by analyzing not only your code but also the code/dependencies of your dependencies. It's not obvious to me given the README.#2021-02-2413:39borkdude@U2FRKM4TW I see, yeah, in that case I think you should put a big fat comment in your deps.edn saying why you included that dep#2021-02-2413:40borkdudeYou can --analyze all of your own code + dependencies, but then you will get a list of suggestions for all transitive deps as well#2021-02-2416:53hiredmanThe use case I have is, I know the api for a number of libraries well, so I can sit down and write a clojure program that uses them, and then suddenly I have make a deps.edn to run it, and I have to Google around to find maven coordinates.#2021-02-2416:54hiredmanWhich is really dumb since the information is actually all already on my local ssd#2021-02-2416:58hiredmanmy local m2 is over 2.5 gigs and I must have been copying it forward across 2-3 laptops because it contains artifacts like the fork of clojure we used at work briefly 8 years ago#2021-02-2416:59hiredmanhttps://clojars.org/mantle/clojure#2021-02-2417:06p-himikOh god, you made me recall how we had ~45GB .m2 dir for a legacy project. And that's on a fresh install. What a nightmare it was to work with.#2021-02-2417:07hiredmanyeah, so so much of the information about libraries is already there#2021-02-2417:28orestis@hiredman you would just type it without a REPL connection?#2021-02-2417:28hiredmanyes#2021-02-2417:29orestisI think in theory I could do that but without the REPL I just feel naked in a thorny forest#2021-02-2412:26superstructor[re-frame "1.2.0"] a framework for building user interfaces, leveraging React.
Headline: Upgrade to reagent 1.0.0 and React 17.
https://day8.github.io/re-frame/releases/2021/#2021-02-2412:28superstructor[re-frame-10x "1.0.0"] A debugging dashboard for re-frame. X-ray vision as tooling.
Headline: Upgrade to reagent 1.0.0 and React 17.
https://github.com/day8/re-frame-10x#2021-02-2412:30superstructorre-frame-template 1.4.0 A lein template for re-frame aka lein new re-frame <app-name>
Headline:
• Upgrade to reagent 1.0.0 and React 17
• Upgrade to re-frame 1.2.0
• Upgrade to re-frame-10x 1.0.0
• Upgrade to re-com 2.13.2, and add example of new re-com debugging features.
https://github.com/day8/re-frame-template#2021-02-2420:44wilkerlucioPathom Viz 2021.02.24 is out! https://github.com/wilkerlucio/pathom-viz/releases/tag/v2021.2.24
On this release:
- Improved auto-complete
- Set larger minimum side for panels in general, this will avoid sections getting completly collapsed
- Incorporate Tailwind CSS as part of internal designs, this already affects some of the UI and is the initial foundation for more UI standardization for Pathom Viz#2021-02-2500:56Michaël SalihiHi! I am pleased to announce that my first Clojure library is out! 🎉
https://github.com/PrestanceDesign/get-port
With this lib I tried to embrace the concept of Clojure (composability, separation of concerns), so it does one things: Get an available TCP port with some options. :)#2021-02-2506:34NazralFixed a bug in my implementation of the Aho Corasick algorithm (ironically it was caused because I forgot to remove debug code), useful for fast string matching
https://github.com/Tyruiop/aho#2021-02-2513:11mpenetNew https://github.com/exoscale/telex is out 0.1.6
* adds body-handler read timeout support#2021-02-2516:49Darrick WiebeI just pushed the first release of Pure Conditioning, a purely functional, fast, and cleanly decomplected condition / restart system in Clojure. It does not use exceptions and needs no global state at all. I think it can cover all Common Lisp condition/restart use cases, at least I haven't encountered any that it can't do. https://github.com/pangloss/pure-conditioning#2021-02-2519:28mike_ananevI just released a new library template. https://github.com/redstarssystems/rssyslib
This `Library template` helps you to quick start new library project using https://clojure.org/guides/getting_started and https://github.com/seancorfield/clj-new.
This `Library template` provides:
• project control via `Justfile` (see https://github.com/casey/just) and scripting using https://github.com/babashka/babashka;
• environment variables control using `direnv` utility;
• editor configuration via `.editorconfig` file;
• configured `clj-kondo` linter;
• configured `cljstyle` formatter;
• run tests using https://github.com/lambdaisland/kaocha.
Project workflow:
{:tag :a, :attrs {:href "/cdn-cgi/l/email-protection", :class "__cf_email__", :data-cfemail "563b3f3d33163b34266664"}, :content ("[email protected]")}#2021-02-2522:37localshredHi Friends! I just released a new clojure SDK for interacting with the NuID Authentication API. I'd love feedback on the library if you get a chance to check it out 🙂
NuID provides a trustless authentication service using zero knowledge proofs to make it so you never have to store passwords again. We're built on clj/s and datomic and absolutely love this community.
Source: https://github.com/NuID/sdk-clojure
Docs: https://cljdoc.org/d/nuid/sdk/CURRENT
Clojars: https://clojars.org/nuid/sdk
NuID Developer Portal: https://portal.nuid.io#2021-02-2601:22Darrick WiebeIn quick succession, I've updated Pure Conditioning to 0.1.1 to correct a couple of deployment errors. I've also created an interactive tutorial on NextJournal, so please check it out! https://nextjournal.com/pangloss/a-tutorial-on-conditions-and-restarts-in-clojure?version=latest#2021-02-2609:16lispyclouds1.0.3 of clj-docker-client is out now! It is an idiomatic, data-driven client for docker and now adds support for Mutual TLS with remote docker hosts and ability to read response streams when an exception is thrown! 😄
https://github.com/into-docker/clj-docker-client/releases/tag/1.0.3
Follow up in #docker#2021-02-2614:46Jakub ZikaGreat work. I am using it right now together with https://github.com/tolitius/Mount to provide local database.#2021-02-2722:59Alex Miller (Clojure team)snyk is running their annual JVM survey again - please complete if you use Clojure! https://snyk.io/blog/java-ecosystem-survey-2021/#2021-02-2723:03seancorfieldDone! For "What build tools do you use?" I put "Clojure CLI" 🙂#2021-02-2723:19borkdudeI put "clojure" :)#2021-02-2723:59pezFramework? Nah!#2021-02-2800:44Alex Miller (Clojure team)I put Clojure CLI too! :)#2021-02-2801:20ericdalloMe searching for a specific Emacs option and finding:
"Vi/Vim/Emacs/Notepad/Atom" 😔#2021-02-2801:24seancorfieldYeah, I kind of rolled my eyes at seeing Atom in that company 🙂#2021-02-2803:37quollWhile Atom is actually for writing code, I’m wondering at the inclusion of Notepad :thinking_face:#2021-02-2809:14CaseyI'd love to watch a talk from someone who uses Notepad, I bet they have some sort of real streamlined workflow. :grinning_face_with_one_large_and_one_small_eye:#2021-02-2810:56Jivago AlvesI suppose you can do it in vim and then copy it to notepad.#2021-02-2815:52jjttjjThere's an APL dialect called co-dfns, the creator uses notepad 😱 You can see him in action here https://www.youtube.com/watch?v=gcUWTa16Jc0#2021-03-0113:04danielnealshoulda used microsoft word#2021-03-0113:04borkdudeor excel, which now supports lambdas#2021-02-2800:12seancorfieldorg.clojure/tools.cli {:mvn/version "1.0.206"} -- Command-line argument parsing -- https://github.com/clojure/tools.cli
* Allow validation to be performed either after parsing (before option processing) -- current default -- or after option processing, via the :post-validation true flag [TCLI-98](https://clojure.atlassian.net/browse/TCLI-98).
* Allow validation message to be a function (of the invalid argument) in addition to being a plain string [TCLI-97](https://clojure.atlassian.net/browse/TCLI-97).
* Add :multi true to modify behavior of :update-fn [TCLI-96](https://clojure.atlassian.net/browse/TCLI-96).
Follow-up in #clojure#2021-02-2817:44borkdudeAs a special thank you to Clojurists Together, here are new releases of clj-kondo, babashka and sci:
https://github.com/clj-kondo/clj-kondo/blob/master/CHANGELOG.md#20210228
https://github.com/babashka/babashka/blob/master/CHANGELOG.md#0211
https://github.com/borkdude/sci/blob/master/CHANGELOG.md#v024
and a video describing the most important features that were implemented during the 2020-Q4 funding round:
https://youtu.be/P09GZVqiDdM#2021-02-2818:12Jeff EvansIt looks like the first couple of items under the Sci section (in release notes) are linking to the issue number in Babashka rather than Sci.#2021-02-2818:13borkdude@U0183EZCD0D Thanks for pointing out, will fix after dinner#2021-02-2819:55borkdude@U0183EZCD0D Fixed!#2021-02-2820:50Luis SantosHi everyone,
I just released ffclj. ffclj is a clojure wrapper around ffmpeg and it can be used with both clojure and babashka.
https://github.com/luissantos/ffclj
As this is my 1st public clojure project all the feedback is welcomed. If you are curious about it or would like to see something implemented, please let know and I will do my best to help.
Thanks.#2021-03-0113:24adam-jamesWow, this is exciting! I had made a babashka script to help me automate some video editing tasks with ffmpeg, but I merely created functions that shell out to ffmpeg - no smart integration at all.
I will have to play around with your library to see what can be done!#2021-03-0114:56Luis SantosHi @U01LR7M2B7A,
I do exactly the same thing. Nothing fancy.
After watching your video about clojure and ffmpeg I would say that you are doing pretty much the same.
The main difference is the use of json instead of text with ffprobe, background tasks and progress notification using async channels.
The later features are more important for automated long running processes.#2021-03-0115:11adam-jamesAh, thanks for watching the video 😉
A user commented the ffprobe json improvement on my gist of the code from that video. It's a smart improvement for sure.
As for async channels, you're completely right about it being better for long running processes. Core.async is still a bit of a weak point in my knowledge, so I suspect i can still learn a thing or two from your work#2021-03-0508:24Steven Lombardibabashka paired with ffmpeg is definitely worth a look - thanks for this#2021-02-2821:43blueberryDeep Diamond 0.19.0 has been released! https://github.com/uncomplicate/deep-diamond#2021-03-0106:49mihaelkonjevicI’ve just released new version of Penkala (0.0.3) - a composable query builder for PostgreSQL. Now with the support for insert, update and delete queries
https://github.com/retro/penkala#2021-03-0107:21myguidingstarhi @U050986L9 , thanks for bringing fresh perspective on sql to clojure community. I am grateful that Walkable is mentioned in penkala's readme. However, I think the statement "eschewing SQL and instead use EQL to write the queries" does not describe Walkable. I guess that's your experience with exoscale's esql, but esql and walkable are not the same#2021-03-0107:24myguidingstarWalkable exposes EQL for clients, but also have an adaption layer (that are hidden from clients) where you can use s-expressions (something like honeysql) to build SQL constructs https://walkable.gitlab.io/walkable/1.3.0/s-expressions.html#2021-03-0107:26myguidingstarI hope that clears the confusion. Anyway, congrats on the release#2021-03-0107:28mihaelkonjevic@U0E2YV1UZ thank you for letting me know. I’ve played around with walkable during the last year (and read the docs multiple times), and I completely missed the s-expressions part. Is that a new thing?
I’ll update the readme and link to the s-expressions docs 👍#2021-03-0107:30myguidingstarno, the feature is part of walkable's core design and has been around for two years https://github.com/walkable-server/docs/blob/master/s-expressions.md#2021-03-0107:31myguidingstarthanks for your collaboration#2021-03-0107:42mihaelkonjevic@U0E2YV1UZ https://github.com/retro/penkala/commit/9749ae3ec3fc279eb0c7f2647e868cd2b489df34#2021-03-0109:50raspasovI made a simple library that allow you to stop core.async go loops:
(only deps.edn :sha at the moment):
https://github.com/saberstack/loop#2021-03-0110:31Dainius JocasI've made a jackson-jq wrapper for Clojure. The intended use case is to embed jq scripting into GraalVM native-images. https://github.com/dainiusjocas/clj-jq#2021-03-0114:33jtkdvlpHelper pack for core.async with focus on error propagation
https://github.com/jtkDvlp/core.async-helpers#2021-03-0114:53Ben SlessWell if we're sharing core.async libraries, I'll share one I've been developing for a while:
more.async: Small composable independent machines. Oriented towards building processing pipelines
What is it trying to solve? I've seen too many times people reinvent the wheel at several points when building core.async processes:
• producing into processing pipelines and consuming from them
• batching
• routing to channels
• circuit breaking
more.async is an attempt to solve those issues once and generically, instead of many times and ad-hoc.
https://github.com/bsless/more.async#2021-03-0115:42orestisPerhaps make a request to include this in https://github.com/clojure/core.async/wiki/Libraries#2021-03-0115:43Ben Sless> last edited 2015
I had no idea that page even existed =/#2021-03-0115:45steffanI (very) recently had a change accepted to add more.async to https://www.clojure-toolbox.com/#2021-03-0115:47Ben Sless😮 thank you!#2021-03-0210:47phillDo you recommend not using periodically! and reductions!?#2021-03-0211:23Ben SlessNo reason not to use either, as both have their uses @U0HG4EHMH#2021-03-0119:08Mathieu CorbinI'm working on a new stream processing engine in Clojure, inspired by Riemann, which can be used for monitoring for example. It's still a work in progress project but I opened the repo and did an article explaining the project: https://mcorbin.fr/posts/2021-03-01-mirabelle-stream-processing/#2021-03-0120:33Adam HelinsPas mal du tout! I remember discussing Riemann with you years ago on IRC and how restarting and loosing state was indeed a pity. Glad to see the groove is still going!#2021-03-0122:36Mathieu Corbinthank you ;)#2021-03-0309:27Jakub Holý (HolyJak)Very interesting, merci! Your mention of logging got me thinking. Currently we send errors to Sentry for incident management/alerting but it is easy to exceed our quota when there is some temporary problem and the same error keeps repeating thousands of times. So I would like to put something in the middle, between our app and Sentry, that would limit the number of "repeated events" that get through. That would require writing an adapter that would expose Sentry-like API (so the clients can be used unchanged) and turned the events into the format Mirabelle understands. Next, I would need to define an event "fingerprint" so that I could detect what events actually stem from the same error condition (I guess some combination of the message and stack trace) and thus make a "throttling window" for each unique error. Finally, a sink that would pass the events that were not filtered out to Sentry.
My question is: Would that be a reasonable use of Mirabelle (or some future version thereof)? Thank you!#2021-03-0422:48Mathieu Corbin@U0522TWDA It should be possible indeed. Adding sentry support should not be that difficult (it's just an http client).
Mirabelle already supports the Riemann "throttle" stream, which only send one to downstream actions evey N seconds#2021-03-0422:49Mathieu CorbinSo imagine you compute a fingerprint and store it in a :fingerprint key in your event, you could do:
(by [:fingerprint]
(throttle 1800 ;; 30 min
(push-io! :sentry)))#2021-03-0422:49Mathieu Corbinlike that, each "fingerprint" has its own throttle#2021-03-0509:16Jakub Holý (HolyJak)nice! thanks!#2021-03-0206:08Scott GriffinRecently released https://github.com/GriffinScribe-LLC/clojure-aes, a pure Clojure implementation of the Advanced Encryption Standard, supporting encryption and decryption for keys of 128, 192, and 256 bits. Check out the library, and let me know of future enhancements you'd like added.#2021-03-0211:57ikitommiWe are happy to release [metosin/malli "0.3.0"]. Malli is a new data-driven data validation and specification library for Clojure/Script. This is a big release, with 44 PRs from 17 contributors. Big thanks to everyone involved!
The key new features:
• Heterogeneous/regex sequences with both naked and named variants
• Schema-based parsing and unparsing
• Multi-arity function schemas
• Runtime function checking using generative testing
• Static function type checking using clj-kondo
• Lot's of small improvements and better performance
• No breaking changes in the public api (since initial release)
• Small breaking changes in the extender api (new protocol methods etc.)
https://github.com/metosin/malli
what's next? join #malli to discuss and to get help getting started.#2021-03-0213:24Vincent CantinCongratulations !#2021-03-0214:49ikitommithanks!#2021-03-0215:57chrisnWe have a preview release of https://clojars.org/clj-python/libpython-clj. This is a near complete refactor removing about 1/2 the code and it brings along with it some important capabilities:
• 32 bit support (!!)
• JDK-16's https://openjdk.java.net/jeps/191
• Both above enabled by a new https://cnuernber.github.io/dtype-next/tech.v3.datatype.ffi.html in dtype-next.
We really tightened the screws on this one. There is far less ephemeral refcounted garbage created so we bind far fewer Python objects to the JVM's GC mechanism. We carefully considered how we interact with python and we were able to remove an entire binary binding system (we no longer need direct access to PyTypeObject). The plan is for this to be a piece of software that everyone feels comfortable contributing to and that is relatively easy to port to other platforms such as graal native or perhaps to use a https://github.com/bytedeco/javacpp-presets/tree/master/cpython.
For the truly geeky we used the excellent https://github.com/jgpc42/insn to generate the exact classes and function calls required dynamically for JNA or JDK-16 creating a sort of macro assembly template system.
This is a preview release so it hasn't been heavily tested but it of course passes all unit tests. I am really looking forward to including our robotics friends moving forward 🙂. Enjoy!!#2021-03-0217:41aratareHi there! So after a few weeks of punching Clojure, I'm pleased to release my first Clojure library https://github.com/aratare-jp/epsilon-clj 😄 It's a codebase generator (based on Eclipse Epsilon) that can preserve custom code inside generated files throughout future regenerations. Feel free to give it a whirl 🙂 Thanks everyone.#2021-03-0217:43vemvLooking good :)
I had a bit of trouble earlier understanding what the lib does... Does it generate arbitrary code? java-only? clj-only?
Is it similar/different from Lein templates?#2021-03-0218:19aratareThanks 🙂 So the point of the lib is to generate code regardless of what file type you want. That's basically it. The difference between this lib and other code generator (selmer, StringTemplates, ThymeLeaf, even Lein templates, etc.) is that you can have custom code inside your generated files. So even if you rerun generation, it will still keep the code there.#2021-03-0219:09vemv> So even if you rerun generation, it will still keep the code there
seems like a great feature, thanks!#2021-03-0314:16mccraigmccraigwe've been testing an alpha of the clojure cassandra client mpenet/alia for a couple of months, and we're ready for any other mpenet/alia users to try it out and report any issues
the big news is that it has been ported to [com.datastax.oss/java-driver-core "4.9.0"] and the api has been updated to reflect the (considerable) API changes in that project
despite those changes, once you've gotten a session set up, usage remains very similar, and we haven't encountered any difficulties in moving our workloads over - so give it a spin and let us know if you hit any problems
https://github.com/mpenet/alia#2021-03-0323:45danielcomptonHi folks! Clojurists Together is holding board elections for 4 new board members. If you’ve been looking to contribute to the Clojure community, this is a unique way to do so. Applications close March 31. clojurists-together
You don’t need to be an experienced Clojure dev to apply, we’re looking for people from a wide range of backgrounds and skill levels.
More discussion in #cljtogether
https://www.clojuriststogether.org/news/clojurists-together-board-nominations-and-annual-members-meeting/#2021-03-0408:31raspasovMy tiny Clojure(Script) Loop library is now on Clojars.
https://github.com/saberstack/loop
Loop allows you to take control of your core.async loops with just a bit of state (one atom).
Start/stop a go-loop from the REPL or “re-define” a running go-loop by starting a new one with the same :id#2021-03-0409:02tomrbowdenJust published a ClojureScript code sandbox in the browser:
https://codesunaba.netlify.app/
Open-sourced on GitHub: https://github.com/AutoScreencast/codesunaba
Inspired by @thheller blogpost on Bootstrapped ClojureScript: https://code.thheller.com/blog/shadow-cljs/2017/10/14/bootstrap-support.html#2021-03-1211:49tomrbowdenI’ve given the app some polish, and added numerous examples. The app now support re-frame and cljs-ajax.
Please let me know what you think.
https://codesunaba.netlify.app/#2021-03-0416:04Alex Miller (Clojure team)https://clojure.org/news/2021/03/04/clojure1-10-3 is now available
• Reverted https://clojure.atlassian.net/browse/CLJ-2564 "Improve error message for case" (1.10.2) due to backward compatibility issues
• https://clojure.atlassian.net/browse/CLJ-2453 Enable reader conditionals in Clojure prepl (thanks Oliver Caldwell for the patch!)#2021-03-0502:13robertfwI have googled "tar.gz decompress args" for the last time, thanks to my little babashka script bunpack . If anyone else is tired of using google/their mind attic to remember how to unpack various file formats, it is available at https://github.com/robertfw/bunpack#2021-03-0507:36Ben SlessJust when I finally remember the correct args?#2021-03-0512:03bartukahttps://github.com/moonpyk/dtrx is one of the first packages I install on clean linux distros. Nice to have a clj option now 🙂#2021-03-0522:03felipebarrosI've used atool for a long time to do that, but there is another tool that has vastly improved my command line happiness in general and also addresses this case: tldr pages. tldr tar would give you a curated little list of the most common commands. I love it.#2021-03-0523:22robertfw@UBSREKQ5Q dtrx looks like a good source for more features/formats to support, thanks for sharing that#2021-03-0521:30mike_ananevI just released a new application template. https://github.com/redstarssystems/rssysapp
This `Application template` helps you to quick start new application project using https://clojure.org/guides/getting_started and https://github.com/seancorfield/clj-new.
This `Application template` provides:
• project control via `Justfile` (see https://github.com/casey/just) and scripting using https://github.com/babashka/babashka;
• environment variables control using `direnv` utility;
• editor configuration via `.editorconfig` file;
• configured `clj-kondo` linter;
• configured `cljstyle` formatter;
• run tests using https://github.com/lambdaisland/kaocha.
This template will give you the following basic project workflow:
{:tag :a, :attrs {:href "/cdn-cgi/l/email-protection", :class "__cf_email__", :data-cfemail "d1bcb8bab491bcb3a1e1e3"}, :content ("[email protected]")}#2021-03-0616:32nonrecursivethis looks neat!#2021-03-0521:31mike_ananevSee also newer version of library template https://github.com/redstarssystems/rssyslib#2021-03-0617:18roklenarcicI’ve release a beefed up shuffle function: https://github.com/RokLenarcic/cljc-shuffle#2021-03-0623:36seancorfieldcom.github.seancorfield/next.jdbc {:mvn/version "1.1.643"} -- https://cljdoc.org/d/com.github.seancorfield/next.jdbc/1.1.643/doc/getting-started -- minor changes since 1.1.613: improved GraalVM compatibility, document/test allowMultiQueries=true for MySQL, document next.jdbc.transaction/*nested-tx*, double-publishing under com.github.seancorfield and seancorfield groups as I shift my libraries to Verified Group Names per Clojars recent announcement -- follow-up in #sql for the library or #clojars for the group name policy.#2021-03-0623:40ribeloi wrote a minimalistic clone of pathom, for fun and for fame. maybe someone will find it useful
https://github.com/ribelo/pathos#2021-03-0709:28Karol WójcikCongrats mate!#2021-03-0718:46jeff tangAthens Research budgets $10,000 in bounties for 20 issues over the next 3 weeks. Learn more about this bounty program here: https://www.notion.so/athensresearch/Bounty-Experiment-3-07-21-3-28-21-d2839e46b19b4bf9aeb6299845974622#2021-03-0718:50eggsyntaxNext time I'd say this would be better in #news-and-articles, please. Thanks!#2021-03-0718:50jeff tangWill do sorry!#2021-03-0718:51eggsyntaxNo stress, it's kind of an edge case#2021-03-0718:52jeff tangHopefully not for long#2021-03-0718:54eggsyntaxWell, we've tried to keep #announcements to be new project or project version announcements, since so many people get notifications for it. It does definitely seem like there's lots of excitement about Athens; definitely a really cool project!#2021-03-0719:21seancorfield(thanks @U077BEWNQ -- I was just about to say the same since this is not a project/library release announcement)#2021-03-0719:25seancorfieldI see you posted this in #jobs as well @UUY06DFL5 so it really should not be in #announcements as well.#2021-03-0719:30jeff tangDeleted#2021-03-0719:31seancorfieldThank you.#2021-03-0722:08noogaI’d like to share a hobby project of mine -> A Bytecode VM and compiler for a Clojure-like language: https://github.com/nooga/let-go
🚨 This is not a Clojure lib, in fact it’s not even written in Clojure. Nevertheless, I think it belongs here :thinking_face:
🐥 It’s super early stage (16 days old) but already starts resembling everybody’s favourite language. Hope you find it interesting:crossed_fingers:#2021-03-0807:55Ben SlessSomething I've been wondering about since coming across this project - if I understand correctly, the compiler targets the VM?
Is your end goal something like gccemacs's native-compiler?
Did you consider the approach of plugging in to Golang's compiler internals and just generate ASTs directly from the code? That would require dynamic linking at runtime and I'm not sure if that's even possible#2021-03-0813:43nooga@UK0810AQ2 yes, the compiler targets the VM. I have chosen this approach to get a constrained execution environment decoupled from the language itself. This way it should be easier to optimize for runtime performance eventually and, perhaps even use the bytecode as IR for another stage that would produce machine code.
Your idea with piggybacking on Go compiler crossed my mind but I’m not anywhere near this yet. One could imagine being able to dump the VM state as a standalone executable that would also contain the interpreter (compiler+vm) that only kicks in for the dynamic stuff. This is possible with bytecode alone but who knows where it goes in the future 🙂#2021-03-0813:48Ben SlessThank you. Do you think the decision to generate bytecode will hamper you in the future if and when you want to emit machine code? You might end up having to write your own compiler from scratch, which is a shame because Golang has a really good compiler.
How constrained would you say the execution environment is given Golang has managed memory? Do you manage memory yourself? Do you feel like going a bit in depth regarding the VM's architecture?#2021-03-0813:56noogaThe current VM is stack based, just a for loop with a big switch inside. It’s utterly slow as it performs runtime checks on everything - this serves mainly as an aid in development - it’s easier to debug when something goes awry. I will slowly turn it towards unsafe when the compiler matures enough that we can trust it. One thing to note is that each call frame has its own instance of the VM and the call stack is handled by Go at the moment - this is slow but will avoid GIL.#2021-03-0813:58noogaperformance is my last priority as I want to get a correct interpreter as the baseline before I go into any attempts at speeding this up#2021-03-0814:04noogaas for compiling to machine code - when I get to it I will probably rely on an existing optimizing compiler anyway. In this case it’s much easier to translate a set of well defined bytecode instructions than it is to go from sexp level to target language/IR#2021-03-0814:07borkdudeMaybe you can target LLVM and re-use that toolchain, eventually#2021-03-0815:40nooga@U04V15CAJ either this or, like @UK0810AQ2 suggested, use Go compiler as a library and generate some Go SSA on the fly 🙂#2021-03-0800:38tony.kayFulcro 3.4.18 is on Clojars. This is a bugfix release that corrects a problem when returning a tree of data from a mutation that uploaded files.
https://github.com/fulcrologic/fulcro#2021-03-0814:10oliyHi everyone,
I'm pleased to announce the 0.1.16 release of Martian
https://github.com/oliyh/martian
Martian is an HTTP abstraction for Clojure/script, making calling remote API endpoints just like calling a function. It supports Swagger, OpenAPI and local API descriptions and can be used with any http library.
This release adds support for:
• Keyword -> string coercion https://github.com/oliyh/martian/issues/105
• Document and optionally merge default values https://github.com/oliyh/martian/issues/18
This release improves:
• Behaviour parsing OpenAPI v3 schemas when encountering an unexpected schema https://github.com/oliyh/martian/issues/103
#2021-03-0814:32lispycloudsHello! Made this tiny lib for doing spec-first servers using #reitit and #malli: https://github.com/lispyclouds/navi
Converts OpenAPI route definitions to Reitit routes and uses Malli for request coercion. Quite experimental and not quite ready for serious use. Hopefully its useful to some of you! 😄#2021-03-0815:44orestisI was dreaming about this some time ago, thanks for releasing it :)#2021-03-0815:46lispyclouds😄 hope this is useful to you! looking forward to making it more robust!#2021-03-0822:37blak3mill3rGreat idea!#2021-03-0905:32plexusThere's a new release of Kaocha, a modern and extensible test runner, featuring many improvements and fixes. Thanks to @actuallyalys_slack, @dharrigan. @socksy, and Rob Hanlon for your contributions! https://github.com/lambdaisland/kaocha/blob/main/CHANGELOG.md#10829-2021-03-08--a88ebda#2021-03-0906:46plexuslambdaisland/glogi 1.0.83 is out. Glögi is a ClojureScript logging library based on goog.log. This version handles some upstream breaking changes, and adds a lambdaisland.glogc namespace for cross-platform logging, which dispatches to io.pedestal.log on Clojure. https://github.com/lambdaisland/glogi#2021-03-0907:44raspasovNew release of saberstack/loop {:mvn/version "0.2.2"}. This is a bug fix release which fixes a concurrency bug.
Loop allows you to take control of your core.async loops with just a bit of state (one atom).
Start/stop a go-loop from the REPL or “re-define” a running go-loop by starting a new one with the same :id
https://github.com/saberstack/loop#2021-03-0922:40blak3mill3rBrilliant! I look forward to trying this out.#2021-03-1003:37raspasov@UC681SR17 great, let me know how it goes#2021-03-0911:07Mark WardleHi. Pleased to announce hermes 0.4 release - an open source and clojure-based SNOMED CT terminology library and microservice https://github.com/wardle/hermes I use it in my electronic health record software running here in the UK - and it is part of a suite of clojure services to support electronic health and care records - answering the 'who', 'what', 'why' and 'when' of health and care. Now with much faster import and indexing, and support for the expression constraint language (e.g. answering complex queries such as does my patient have a diagnosis that is a lung disease associated with oedema) for supporting both direct care / rules / decision support and analytics. I use it to show specialist pages like specialised summaries for motor neurone disease or multiple sclerosis so the clinician sees the right information at the right time.#2021-03-0911:08Mark WardleThe other linked projects are concierge (https://github.com/wardle/concierge - integration with legacy enterprise APIs in NHS in Wales, UK), nhspd (https://github.com/wardle/nhspd - providing UK geographical services mapping postcodes to administrative regions/indices of socio-economic deprivation - I've used extensively in our research output on outcomes in multiple sclerosis), trud (https://github.com/wardle/trud - providing sane access to the UK NHS' reference data) and clods (https://github.com/wardle/clods - providing a library and microservice for UK health and care organisations. These essentially drive a tonne of logic in my health and care software - e..g find local GPs or hospitals etc. I've never been able to create so much functionality with so little code so thank you clojure!#2021-03-0917:18schmeeI don’t work in healthcare so I have no idea about the functionality, but it was really interesting to take a look at this codebase, thanks for sharing! :thumbsup:#2021-03-0917:44Mark WardleThanks! Well I have only recently started using clojure in the last year so I hope you mean "good" interesting and not "oh crumbs" interesting...#2021-03-0919:00schmeehaha, definitely the first one 😄#2021-03-0918:17nilernDebuting Monnit, just another monads library https://github.com/nilern/monnit#2021-03-0919:48lilactownas an experienced clojurian I don't really understand what the value prop of the lib is in practice; do you have any examples of how it should be used?#2021-03-0919:49lilactownin the tests I see e.g. fmap/flat-map/sconcat used on vectors, but I don't see the benefit of that over the clojure.core seq ops#2021-03-0919:50lilactownjust to clarify: this isn't a dig btw, I'm genuinely curious. it sounds like you have some concrete use cases for this and went and built a lib to handle it#2021-03-0920:22nilernThe point is not that it is somehow better to use fmap than mapv or something. I built this mostly as a basis for other libs that do stuff like async IO, parsing or algebraic effects. But the included monads can automate the plumbing around error handling, context parameters and immutable state.#2021-03-0920:25lilactownyeah! I've been banging on my own experiments w/ async IO and effects in my spare time, and find myself having to do a lot of complex stuff with dynamic bindings, which is why I'm interested in learning how I could use more formal patterns in those efforts#2021-03-0920:25lilactownmaybe I should just wait for you to announce your other libs 😄#2021-03-0920:26nilernIt's a polarized topic; I think nil and exceptions promote bad error handling and that dynamic Vars are usually a code smell while other people think it's cool and I've just had too much Haskell.#2021-03-0920:32nilernYeah I hope the other libs will be more exciting or at least mindblowing#2021-03-0921:02mccraigmccraiglol, I've also been working on a monad lib @U4MB6UKDL ... not quite ready yet, but taking shape... https://github.com/mccraigmccraig/promisefx#2021-03-0921:06nilernI did say "just another monads library"#2021-03-0921:08mccraigmccraigmust be a mini-zeitgeist#2021-03-1001:49blak3mill3r@U4YGF4NGM and others wishing to explore the value-proposition of Monads from a clojure perspective may appreciate this talk https://www.infoq.com/presentations/Macros-Monads/#2021-03-1001:51blak3mill3rMonads are very powerful and FWIW, I am glad to see this new library from @U4MB6UKDL ... one of my favorite things about Clojure is that it can be extended so flexibly that we can poach most excellent ideas from other languages.#2021-03-1007:57Ben SlessAny chance to bother you for a sneak peak on how you intend to use it for async IO or effects?#2021-03-1008:57mccraigmccraigi like the formulation with the various effect operations implemented as different types @U4MB6UKDL ... food for thought - are you heading towards a general purpose effect-combining approach like fused-effects &c ?#2021-03-1012:01nilernSo https://github.com/nilern/taksi is my async library, the goal is something similar to Scalaz ZIO and Concurrent ML. I also have a freer monad with higher-order effects for maximum expressivity https://github.com/nilern/fell but I am not sure whether that is even a good idea; the ZIO/polysemy approach might not support backtracking with scoped resources or whatever but that is hardly called for in web apps.#2021-03-1012:08nilernObviously those should not be used yet and fell doesn't even use monnit ATM#2021-03-1012:39mccraigmccraigthis looks great - and i haven't really grokked the free/freer stuff yet, having a clojure should help me with that 🙂#2021-03-1013:03nilernIt's hard and dynamic typing probably makes it even harder. Again, not sure if bringing such a thing into Clojure is even a good idea.#2021-03-1013:12mccraigmccraigwell i won't be able to discuss that point until i've grokked them 🙂#2021-03-1013:12mccraigmccraigbut even if free/freer is not the route, i do think that there's a lot of scope for bringing effectful stuff into clojure#2021-03-1013:58nilernYes and the re-frame (-style) effects processing is very clunky, surely we can do better than that#2021-03-1014:00lodin@U4MB6UKDL How do you know which monad to use in mlet?#2021-03-1014:09nilern(mlet [a (foo 5)] ... just becomes (bind (foo 5) (fn [a] ... and bind is a protocol method. The mlet bindings could even use different monads but don't do that (seems that in Haskell do is not just syntactic sugar after all since using different monads in one do is a type error).#2021-03-1014:12lodin(In Haskell it is just sugar since bind has the type m a -> (a -> m b) -> m b; the m cannot change.)#2021-03-1014:17lodinNow I see. While you have a multimethod pure, you actually use regular function for the particular monad.#2021-03-1014:17nilern(I see it now.)#2021-03-1014:19nilernYes there is no magic to emulate return value polymorphism for pure.#2021-03-1014:19lodinThe docs for mlet is a bit misleading I think, unless I'm missing something.#2021-03-1014:23nilernYou found a bug in the docstring, the pure part would not work (unless you e.g. :refer monnit.option/pure)#2021-03-1014:25lodinTo make it work you'd have to save away the result of e.g. (foo 0) and pass that as the first argument to pure.#2021-03-1014:33nilernActually (type a). algo.monads implicitly wraps the body in the right pure and Cats sets a dynamic Var to a MonadContext so that (pure 0) usually just works (but there have been bugs).#2021-03-1014:39nilernOne of my motivations is to avoid any indirections and tricks like that. Even the pure multimethod is just for situations where pure must actually be polymorphic like helper fns/macros.#2021-03-1014:44lodinUnfortunately that approach doesn't work well with lazy evaluation, eg if you use it in a function that you use with map. Then the context might be missing, or even the wrong context, when running the function.#2021-03-1014:48nilernAs I said earlier I usually see dynamic Vars as a code smell. The Reader monad should be less fragile (but the Cats implementation uses dynamic Vars 🤯).#2021-03-1017:55nilernI put out 0.1.2 with docstring improvements https://cljdoc.org/d/com.deepbeginnings/monnit/0.1.2/api/monnit.core (thanks @U8J6W2SC8!)#2021-03-1022:42lreadrewrite-clj 1.0.572-alpha is available. The rewrite-clj library is used to parse and rewrite Clojure/ClojureScript/EDN source from Clojure and CloureScript while preserving whitespace.
After a long, pleasant and circuitous journey, I am pleased to announce the first v1 (alpha) release of https://github.com/clj-commons/rewrite-clj. This release dusts off a well loved Clojure library, and adds https://github.com/clj-commons/rewrite-clj/blob/main/CHANGELOG.adoc#rewrite-clj-v1.
Notably, it merges in, and brings up to feature parity with rewrite-clj v1, the functionalities of https://github.com/clj-commons/rewrite-cljs. The release is looking solid to me, but I expect there to be issues and feedback, hence the alpha status. Thanks to a wonderful community for all the help and delightful interactions. And much thanks to @rundis for rewrite-cljs and @yannick.scherer for rewrite-clj v0.
All with an interest are most welcome to drop on over to #rewrite-clj to chat.#2021-03-1110:12Ertugrul CetinWe have been working on a project called Code 3D World. We are thrilled to announce that the first version is released 🎉
Code 3D World is interactive, and batteries included a 3D coding platform for beginners.
https://github.com/ertugrulcetin/code3dworld#2021-03-1117:10Jakub ZikaWhat do you use for 3d rendering? Just webgl?#2021-03-1117:50blak3mill3rCongrats! This is a wonderful idea.#2021-03-1119:14Ertugrul Cetin@UL8KUA286 JMonkeyEngine, which uses lwjgl underneath#2021-03-1119:17Ertugrul Cetin@UC681SR17 Thanks! Glad you liked it.#2021-03-1119:39blak3mill3rIt reminds me of https://en.wikipedia.org/wiki/Turtle_graphics from my childhood... but has the potential to teach so much more.#2021-03-1118:01chrisnWe have something really special today in libpython-clj news. Aside from continued work to stabilize v2 we have built a way to https://clj-python.github.io/libpython-clj/embedded.html!! This sidesteps a ton of issues of trying to setup the correct embedded python environment from Clojure and instead allows a primarily Python system to run arbitrary Clojure code -- I am really excited about this possibility. In any case, itemized updates:
• Many bugfixes to allow v2 to automatically detect python on more systems.
• the libpython-clj project is now https://github.com/clj-python/libpython-clj/blob/master/deps.edn.
• You can run a Clojure repl from a Python host!!
Come sit right at the technical cutting edge: https://github.com/clj-python/libpython-clj#2021-03-1121:05raspasovThat’s the ultimate inception! So I guess that’s “similar in spirit” to how Clojure runs within the JVM?#2021-03-1121:34xcenoOh my god, you might have just enabled me to (finally) script Unreal Engine with Clojure! 🤯#2021-03-1121:38emccue@U012ADU90SW wait what#2021-03-1123:48chrisn@U050KSS8M - It is similar in that spirit and it uses libpython-clj to do the interop with the host language where necessary. Physically what happens is python loads java via a shared library and creates a vm object with a classpath provided by the clojure command line program. From there you can do things like find class, call static method, etc. Then we bootstrap Clojure, nrepl, cider, and off we go.#2021-03-1202:24raspasov@UDRJMEFSN Very cool, yes. I used libpython-clj a few months back. Was mostly a very good experience! Will report when I get a chance to try this new version. Is there a full/real JVM running within Python in this case?#2021-03-1203:15gigasquidFantastic work#2021-03-1209:37Lasamazing!#2021-03-1212:36chrisn@U050KSS8M - yes, when you install the JDK or the JRE it installs both a java executable and a shared library for embedding java in another system. In the embedded case we use javabridge which calls java on the command line to find the shared library and then loads that. AS far as I can tell it is a real JVM.#2021-03-1212:53xceno@U3JH98J4R haha yeah, i don't want to hijack this thread. but feel free to ping me if you want. TLDR: UnrealEditor is scriptable via python since V2.22 or so, and I've dabbled around with ECL and CLJS for runtime stuff, but nothing serious yet#2021-03-1213:01raspasov@UDRJMEFSN Thanks for the detailed explanation! And, I assume, that JVM shares memory with the Python runtime?#2021-03-1214:13kwrooijen@U012ADU90SW Wouldn't this require you to embed the JVM in unreal?#2021-03-1214:15xcenoYes, but there are already projects out there that embed V8, Python and all kinds of other stuff. So I know it works in theory. You don't want to have clj calls in tight gameplay loops of course, but for the stuff we do which involves a lot of pre-processing, server calls and stuff it would be great.
It would also be completely different than what arcadia does with unity. So I look at it as a great additional tool, rather than a complete replacement for c++, or blueprints (for now).#2021-03-1214:57chrisn@U050KSS8M - Yes exactly. So zerocopy pathways should work. Shared memory space for better or for worse. Well, up until you use the python multiprocessing module then of course you have Y shared memory spaces.#2021-03-1217:27phronmophobicclj-cef 0.9.4 is now available. This release adds support for linux.
clj-cef provides clojure bindings to the Chromium Embedded Framework. Embed, host, automate, instrument, or inspect a fully HTML5-compliant web browser.
https://github.com/phronmophobic/clj-cef
example: https://github.com/phronmophobic/htmltoimage#2021-03-1217:34wilkerluciodo you think that's easy to inject for example in Reveal?#2021-03-1217:35wilkerlucio@U47G49KHQ#2021-03-1217:43phronmophobicit depends on what you mean by easy and inject 😛#2021-03-1217:43phronmophobicI thought Reveal already had a web view?#2021-03-1217:46vlaaadJavaFX's web view kinda sucks#2021-03-1217:47vlaaadIf would be great to have something like chrome as JavaFX web view#2021-03-1217:51wilkerlucioyes, I already have some cases that don't work in the JavaFX web view, that could be game changer for using Web based things to visualisations inside Reveal#2021-03-1217:51phronmophobicInteresting. It's definitely not as easy as using the built in JavaFX component, but if there's interest, I would be happy to work with someone to make that work.#2021-03-1217:53phronmophobicthere are at least two major caveats:
• clj-cef doesn't have a windows build
• the cef framework is rather huge (300MB on OSX and 1GB linux)#2021-03-1218:05wilkerlucioI would love to have that, I used JxBrowser with success in reveal, it works great, but the huge caveat is that is paid (and quite expensive), so I only used during the 30 day trial#2021-03-1222:48phronmophobic@U066U8JQJ, how did you integrate JxBrowser? Did you write a reveal plugin? Is that available somewhere?#2021-03-1309:04vlaaadIIRC jxBrowser has javafx nodes#2021-03-1309:04vlaaadhttps://bitbucket.org/chromiumembedded/java-cef/issues/163/provide-javafx-node-for-jcef found this jcef issue from 6 years ago, still unresolved 😕#2021-03-1309:22phronmophobicthe jcef project does a bunch of stuff that I think complicates things. clj-cef uses the cef c api directly. I already having a working example that draws to a BufferedImage, https://github.com/phronmophobic/clj-cef/blob/main/examples/htmltoimage/src/clj_cef/htmltoimage.clj#L36.
I also have an example that works on top of skija, https://github.com/phronmophobic/clj-cef/tree/main/examples/browser. I'm pretty sure it would be possible to get something that's JavaFX compatible.#2021-03-1313:15wilkerlucio@U7RJTCH6J sadly I can't find the code I used for the JxBrowser#2021-03-1320:24phronmophobicthere are a couple options for integration. how did you use the browser in your workflow and what were the cases that didn't work for the built in JavaFX webview?#2021-03-1220:33blueberryDeep Diamond 0.20.0 released with DNNL upgrade to 2.1.1. https://github.com/uncomplicate/deep-diamond#2021-03-1221:44lilactownFormally announcing my library https://github.com/lilactown/autonormal, which provides two cool capabilities:
• Quickly normalize nested maps into a flat, tabular structure
• Quickly pull data out of nested maps and/or normalized maps using EQL
[lilactown/autonormal "1.1.0"] is available on clojars. Praise and feedback is welcome via DM on slack or issues on github 😄#2021-03-1322:44uochanJust released antq ver 0.12.0, Tool to point out your outdated dependencies.
https://github.com/liquidz/antq
- Support detecting dependencies which has unverified group name (e.g. seancorfield/next.jdbc -> com.github.seancorfield/next.jdbc )
- Support detecting versions in 3rd-party GitHub Actions such as https://github.com/DeLaGuardo/setup-clj-kondo
- Changed GroupId to "com.github.liquidz" which is verified by clojars.#2021-03-1322:46borkdudeThank you!
I was looking at your tool recently with @UE21H2HHD and we wondered how you manage to package gitlibs (like rewrite-clj at the time) to clojars?#2021-03-1322:47borkdudeGood to see you moved to the clojars alpha now!
https://github.com/liquidz/antq/commit/4a248e3be52c7fc9e6a0f5435d06a560a1721bd2#2021-03-1322:48lreadoh awesome, another rewrite-clj v1 user!#2021-03-1322:55uochan@U04V15CAJ I'm not sure if this answers your question, but I'm just deploying the JAR created by depstar.#2021-03-1322:56uochan@UE21H2HHD Thanks for your great work!#2021-03-1322:57borkdude@U04V70XH6 Does depstar automatically include sources of gitlibs in a jar?#2021-03-1322:57borkdudeif you inspect ~/.m2/repository/antq/antq/0.11.2/antq-0.11.2.jar you will see rewrite_cljc sources in there which were from a gitlib#2021-03-1323:49seancorfield@U04V15CAJ Yes, because :local/root and :git/url on the classpath look just like :paths so they are all treated as “source” code for the JAR. Folks building JAR files with such dependencies should probably use :exclude to ensure such things don’t leak into your libraries.#2021-03-1323:50seancorfieldThat’s mentioned in the README but only under AOT compilation at the moment: “(which normally corresponds to your own project’s source files, but will also include :local/root dependencies and :git/url dependencies, since those show up as directories on the classpath)”#2021-03-1323:52seancorfieldhttps://github.com/seancorfield/depstar/issues/73 so I’ll remember to make that clearer.#2021-03-1407:52borkdudeThanks. In this case it actually worked out but in general it might not be a good idea to package someone else’s code #2021-03-1405:24tony.kayI’m happy to announce a release of Fulcro that includes an often-requested feature: Better interop with, well, everything (raw React, Reagent, Reframe, name your react library of choice).
This means you can now use Fulcro to control your full-stack story without having to rewrite your entire app to do so. Adopt it for transaction/network/state processing where you want that leverage.
The work is in-progress, but I think the additions (which so far are only about 170 lines of code) allow Fulcro 3.4.20 to be easily embedded anywhere (and in any number of places at once) in the UI tree of any React app.
This support leverages React Hooks, and you can see a very simple example of it being used in a workspaces card here:
https://github.com/fulcrologic/fulcro/blob/develop/src/workspaces/com/fulcrologic/fulcro/cards/composition_cards.cljs
The implementation is in an alpha namespace (https://github.com/fulcrologic/fulcro/blob/develop/src/main/com/fulcrologic/fulcro/alpha/raw_components.cljc), and will be integrated into the main library as soon as it is widely tested and refined.
https://github.com/fulcrologic/fulcro#2021-03-1421:04Candidjoker v0.16.0 is released: https://github.com/candid82/joker/releases/tag/v0.16.0#2021-03-1512:18blueberryNeanderthal 0.40.0 has just been released! High speed vectors and matrices on CPU and GPU. Two books available that teach both theory and practice. Lots of code inside! https://github.com/uncomplicate/neanderthal#2021-03-1514:58pezSay Hello to Calva’s Getting Started REPL. For the past more than a month I have been busy trying to improve the somewhat weak Getting Started story of Calva. It became apparent that requiring the user to have a project was a bit too high a threshold to set up. Thus the Getting Started REPL was born. Using @borkdude’s deps.clj I could bring the user setup down to having just VS Code/Calva + Java. Then firing off one command in Calva will bring up an editor-connected Clojure REPL, in just a few seconds. It will also bring up three files that work like Interactive Programming guides:
• hello-repl.clj – The basics of how to evaluate code in Calva
• hello-paredit.clj - A super brief intro to Calva structural editing
• hello-clojure.clj - The very basics of the Clojure language
That first guide has already raised the level of the problems users report with using Calva. Things we long-time Calva users take for granted are now introduced in a proper way. That last guide is what has had me most occupied. It will keep occupying me for quite a while more, actually. I am hoping it will serve the same service to Clojure as that Calva guide does for Calva. Wish me luck with this work, please.
Here’s a demo of the feature and both those guides: https://www.youtube.com/watch?v=O6GrXXhCzCc
Please help us share the demo video to people curious about picking up Clojure. (If you think it is any good for that, of course.)#2021-03-1515:01pezIn addition to the Getting Started feature, these things are new in Calva since last announcement (iirc).
• Implementation detail: https://github.com/BetterThanTomorrow/calva/pull/1053
• https://github.com/BetterThanTomorrow/calva/issues/1057
• Add custom REPL snippet variables, $selection, $head, and $tail
• Fix: https://github.com/BetterThanTomorrow/calva/issues/1047
• Revert switch to cljs for lsp, until https://github.com/BetterThanTomorrow/calva/issues/1044 has been fixed
• https://github.com/BetterThanTomorrow/calva/issues/1025
• Fix https://github.com/BetterThanTomorrow/calva/issues/814
• https://github.com/BetterThanTomorrow/calva/issues/1003
• https://github.com/BetterThanTomorrow/calva/pull/981
• https://github.com/BetterThanTomorrow/calva/issues/529
• https://github.com/BetterThanTomorrow/calva/issues/860
• https://github.com/BetterThanTomorrow/calva/issues/1016
• https://github.com/BetterThanTomorrow/calva/issues/1011
• https://github.com/BetterThanTomorrow/calva/issues/1008
• https://github.com/BetterThanTomorrow/calva/issues/1005
• Fix: https://github.com/BetterThanTomorrow/calva/issues/975
• https://github.com/BetterThanTomorrow/calva/pull/995
• https://github.com/BetterThanTomorrow/calva/issues/950
• https://github.com/BetterThanTomorrow/calva/issues/986
• Fix: https://github.com/BetterThanTomorrow/calva/issues/1000
• Fix: https://github.com/BetterThanTomorrow/calva/issues/976
#2021-03-1517:37Jakub Holý (HolyJak)Awesome initiative with the intros, thank you! I planned on contributing but just couldn't find the time... 😢
And an impressive change log!#2021-03-1522:25borkdudeBabashka 0.3.0: finally a binary available on linux aarch64! This means you can now have fast Clojure scripting on Raspberry Pi (64bit)! 🎉
https://github.com/babashka/babashka/blob/master/CHANGELOG.md#030
I will send free babashka stickers* to those who will post a photo of bb running on their aarch64 device (Raspberry Pi4, Chromebook, ...) on Twitter.
Show the output of uname -m along with bb -e '(println :hello :world)'. Use the hashtag #babashka
*) until I run out
Special thanks to #circleci#2021-03-1522:59just.sultanovThe next ninja tool is now available - ninja.platform/javac v0.0.1. It is a Clojure library for compiling Java source code.
https://github.com/just-sultanov/ninja.platform/blob/master/docs/ninja.tools/javac.adoc#2021-03-1611:38vemvlooks nice!
what would be the elevator pitch vs. Leiningen's javac?#2021-03-1614:17just.sultanov@U45T93RA6 lein javac doesn’t work with deps.edn#2021-03-1602:55djblueI just released https://github.com/djblue/portal https://clojars.org/djblue/portal/versions/0.10.0 🎉 Watch the video for some of the highlights and https://github.com/djblue/portal/blob/master/CHANGELOG.md is available for a complete changelog.#2021-03-1616:15Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.10.3.814 is now available!
• git deps: switch from using jgit to shelling out to git (must be git >= 2.5) - big thanks to @ghadi for all the initial work on this!
◦ New env vars for control:
▪︎ GITLIBS_COMMAND - command to invoke when shelling out to git, default = git
▪︎ GITLIBS_DEBUG - set to true to print git commands and output to stderr, default = false
• Made git fetch only when shas can’t be resolved to improve performance
• Bump dep versions for tools.cli and aws api to latest (in particular, moves transitive jetty deps to latest, past a CVE)
• Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.11.905
In general, this should resolve a large set of differences between using git deps through clj vs git at the command line, since they are now the same. Some additional benefits include a smaller deps footprint, and better performance.#2021-03-1810:17imreHey Alex, do you know when the official docker images will get updated by any chance?#2021-03-1812:11Alex Miller (Clojure team)No, I don’t have any connection to those#2021-03-1812:12imreThanks anyway, I'll try to find out who to nag, then 🙂#2021-03-1913:50imreI managed to find that out only to be advised that this version is still listed as pre-release at https://github.com/clojure/brew-install/blob/1.10.3/CHANGELOG.md
Is that still accurate? It doesn't seem like it's a pre-release from your announcement#2021-03-1913:51imrehttps://github.com/Quantisan/docker-clojure/pull/105#issuecomment-802843983 FYI#2021-03-1914:04Alex Miller (Clojure team)nope, I just forgot to update that, will do#2021-03-1914:06Alex Miller (Clojure team)done#2021-03-1914:09imreThanks a million!#2021-03-1914:11Alex Miller (Clojure team)there are several other places indicating it's a stable release - https://clojure.org/releases/tools, https://github.com/clojure/brew-install/blob/1.10.3/stable.properties, https://github.com/clojure/homebrew-tools/blob/master/Formula/clojure.rb#2021-03-1701:10pezWant to easily tap> those let bindings? Please give taplet a try. It has a macro named let> that you can use instead of let that will tap the binding box. It is WIP and I would love me some feedback. Read a bit more about it at ClojureVerse: https://clojureverse.org/t/lets-tap-with-let-a-k-a-my-first-macro-taplet/7361#2021-03-1701:34Vincent CantinI am announcing the Girouette CSS library.
• Specifically designed to be as easy to customize as possible.
• Purely functional, no side effect or global registry.
• Written in CLJC, runs everywhere, suitable for virtually any use case or Clojure tech stack integration.
• Has grammar rules which, when used, provides a full compatibility with all of Tailwind's CSS classes.
• Its source code processor finds the CSS classes your program is using.
• Generates and updates a CSS file while you are developing.
• Does basically the same as Tailwind-JIT, but in pure Clojure.
Github project: https://github.com/green-coder/girouette
Video presentation: https://www.youtube.com/watch?v=Tnv6SvZM6tg
Slides: https://app.pitch.com/app/public/presentation/7282e9fa-8789-43bc-8b2d-eaec38711d98
Short GIF demo: https://twitter.com/VincentCantin/status/1365980792325726212#2021-03-1702:51Vincent CantinPeople interested to talk about the project can join the #girouette channel.#2021-03-1707:46Michaël SalihiBravo Vincent !
Little typo, "Written in CLJC, run everywhere" instead CLJS.#2021-03-1707:47Vincent CantinThank you 🙂
Typo fixed.#2021-03-1717:10pezAh, I see. That confused me. I thought there were some magic involved. 😃#2021-03-1722:04Jakub Holý (HolyJak)A great stuff, thank you! And another typo
> Girouette also make it easy to use you own grammar rules
Should likely be "your"?#2021-03-1808:14Vincent Cantinthank you, it's fixed#2021-03-1712:49practicalli-johnMonthly update of the practicalli/clojure-deps-edn project containing a wide range of community tools for Clojure CLI (deps.edn) projects
Monthly library version update via the alias `:project/outdated` which uses antq project. The full changes are documented in the change.log.
Highlights include:
• new :service/webserver zero-config command line HTTP server using the nasus project
• new domain names for antq, depstar and next.jdbc (reported by antq 0.12.0)
• com.github.liquidz/antq - version 0.12.0
• cider/cider-nrepl - version 0.25.9
• djblue/portal - version 0.10.0
• lambdaisland/kaocha - version 1.0.829
• org.clojure/data.json - version 1.1.0
• seancorfield/clj-new - version 1.1.264
• com.github.seancorfield/depstar - version 2.0.193
• com.github.seancorfield/next.jdb - version 1.1.646
• vlaaad/reveal - version 1.3.196
https://github.com/practicalli/clojure-deps-edn#2021-03-1716:25seancorfield@U05254DQM clj-new has also started to be published under a new domain com.github.seancorfield (as well as the old one). All of my libs will be double-published for a while, to allow folks to switch over gradually.#2021-03-1717:42practicalli-johnUsing antq picked up the change in depstar and next.jdbc, but hasn't reported the change for clj-new.
I'll do a little experimenting as to why and update clj-new soon anyway. Thanks.
Great to have this approach being adopted.#2021-03-1713:44Mark WardleAnnouncing clods - a (niche) health and care library/microservice/HL7 FHIR server for organisational reference data in the UK. Find local hospitals or GP surgeries within a range of any UK postal code, or track organisational change over time. https://github.com/wardle/clods Designed to be embedded in larger services, requiring only a local filesystem to operate, but can also run as a standalone server if needed, including a FHIR R4 option if required.#2021-03-1717:02henryw374new minimal clojure wrapper over log4j2: https://github.com/henryw374/clojure.log4j2
My requirement was to be able to log data - meaning logging that data into a db, without going via string representation,
whilst keeping all existing java logging config working. As far as I could see the only thing capable of that is log4j2 and although clojure.tools.logging can use log4j2, it stringifies messages before they get to the implementation#2021-03-1717:24tanzoniteblackIn case you weren’t aware, you can do this kind of thing with timbre ( https://github.com/ptaoussanis/timbre ). It allows you to send the logging info to a clojure function, which you can then update to do whatever you want with the structured data.
built in postgres appender (which would need modified to not force a string): https://github.com/ptaoussanis/timbre/blob/master/src/taoensso/timbre/appenders/3rd_party/postgresql.clj
and here’s an example of an appender I wrote to send structured json data to insightops (formerly logentries), which is probably a decent model for how you might want to send data over to your DB https://github.com/yummly/logentries-timbre-appender/blob/master/src/yummly/logentries_timbre_appender.clj#L55#2021-03-1717:25tanzoniteblackto get it to work with log4j, in case you already have java libraries using that and you need to capture those logs as well, you’d need https://github.com/fzakaria/slf4j-timbre as the log4j appender#2021-03-1717:30henryw374Thanks.. if you see in the references there is a clojureverse discussion where people mention scaling issues with timbre, so that put me off#2021-03-1717:33tanzoniteblackah, interesting. We use timbre in all of our clojure services at Yummly and have never noticed any scaling issues. We’ve overloaded the underlying insightops logger before, but never had issues with timbre itself#2021-03-1717:34tanzoniteblackI wonder what those issues were (don’t see a link in the clojureverse explicitly talking about it, but I might just be overlooking it)#2021-03-1717:43henryw374Yeah I don't know.... It may just be FUD. Also ppl talk there about dependency hell probs with it. It might be great now I don't know. Sticking with log4j2 seemed like safe bet.. big community etc#2021-03-1717:55tanzoniteblackyep! definitely can’t hurt sticking closer to the raw log4j2. Just wanted to make sure you were aware of the other existing options!#2021-03-1718:01henryw374Thanks @U236LQYB0, much appreciated!#2021-03-1720:06vemvmy experience with timbre + slf4j-timbre has been mixed.
essentially timbre is a library that, in its own words, rejects the whole java ecosystem; that kind of makes sense but at scale, inevitably one has to deal with arbitrary Java dependencies that do assume slf4j and friends.
So delegating such a crucial functionality to an unofficial 3rd-party lib is not exactly ideal.
I'm happy clojure.log4j2 exists; thanks Henry! Will keep an eye on it#2021-03-1720:35steffanμ/log is another logging library that logs data rather than strings, though it does not aim to wrap or target Log4J. The design notes on its internals mention considerations (among others) for speed and having few dependencies, so you may find it interesting if these matters are of concern.
https://github.com/BrunoBonacci/mulog#2021-03-1721:20niwinzIf you want to log data with log4j2 you, can use the JSON Layout. Right now we are using ZMQ appender with JSON layout, and then a simple subscriber thread on clojure part that sends the logs to Loki. (I know, an other option is create an appender, but this solution was very easy to setup). If you wan't code references just ping me.#2021-03-1722:18henryw374Thanks @U2C6SPLDS for mulog info - I did see that one before but I was looking for full integration with existing log setup ideally.
Also, when you have a well established java library, I feel clojure projects would do well to explain what pros/cons they have in comparison. Having read the readme and now watched the video, the appenders, context info & api seem basically the same. the trace bit of mulog looks nice, but would just be one simple macro to add?
on log4j2 pluses, I have docs, stackoverflow-ability, blogs, recommendations etc etc
re:performance - I can't see in mulog readme what tests have been done vs log4j2 or others#2021-03-1722:21henryw374@U06B73YQJ - it seems getting data via a layout is a bit of hacky though? and writing appender seems straightforward... got one in progress for influx for example https://github.com/henryw374/influx-log4j2-appender/blob/master/src/com/widdindustries/InfluxDbProvider.clj
thought I'd have to AOT it but no#2021-03-1808:34rickmoynihan@U051B9FU1: Well done for taking the time to make this library.
I feel like it does fill a hole.
As others have mentioned I dislike timbre, as I’ve been burned by it pretty much everytime I’ve seen it included in a project (maybe 2 or 3x).
We’ve standardised most of our apps on log4j2 via SLF4j and clojure.tools.logging.
I 💯 % agree with staying close to an established java logging system; and also think log4j2 is one of the best (if not the best) choice for a backend.
As far as I’m concerned the benefits of using edn over xml to configure the logger are far outweighed by the practicalities.
I’d also certainly like all logging to be data; but we also use SLF4j to capture and redirect logs from java libraries that use different logging frameworks.
Unfortunately these can’t really be retro fitted to log data, so I’m not sure it makes much sense for us to switch to this… though I guess in principle we could have a clojure data log and send everything else to other non-data logs.
Regardless, I just wanted to say, that knowing far more than I ever wanted to about the java logging eco-system, I agree with your analysis and approach here.#2021-03-1809:44henryw374Thanks @U06HHF230!
To explain more about my own plans, I'm aiming for a gradual approach. I had a logback/clojure.tools.logging setup with log events coming out as json string in stdout, e.g. {level "INFO" message "foo" anMDCfield "yay"} - and that continues to work after switching the backend to log4j2, for both my application's log statements and those from 3rd party libs. now I'm adding/changing my application logging to use the log4j2 data api, and having the existing appender keep working - only now I'm optionally adding other data fields ofc. In addition, I've now got other appenders that work directly with the data - in some cases filtering events to those that are in the new 'data' style, ie not just containing message field.#2021-03-1809:52rickmoynihanYeah that’s exactly what I was thinking.
If I was starting again fresh I’d probably do that too, or if I needed to integrate something to datafy my logs.
We have some custom datadog integrations that already essentially log data to datadog, however because we want to send data we currently do it outside of the logging system.
If I were to do it again now I’d probably integrate it with this and implement it as an appender as you say; however it doesn’t feel like it’s worth the churn to change right now.#2021-03-1809:54henryw374:thumbsup:#2021-03-1810:00rickmoynihanIncidentally one feature that I don’t think you have are log4j2 ThreadContexts. They’re very useful. We have a macro in some of our projects that use those to for example assign every incoming http-request a unique id, and associate it with every (asynchronous) action related to that request.
If you want I can open an issue and paste the code for you to mull over including.#2021-03-1810:04henryw374thanks yeah that's on my list. we have a similar macro that puts stuff in MDC context.
so.. yes please to issue 🙂#2021-03-1810:10rickmoynihanah is there a good reason why you’ve chosen the Apache license over EPL?#2021-03-1810:12rickmoynihanThe original code was ported from a library @U050CTFRT wrote. It was dual licensed under EPL 1 or AGPL 3.
Most clojure code tends to use EPL, as that’s the license clojure uses too.
Apache/EPL may be compatible, I don’t know.#2021-03-1810:18rickmoynihanIf you change to EPL you’ll be able to just use it.
I’ll not supply the code incase you want to do a clean room implementation (as there’s not a lot to it). Though if we ask malcolm nicely he might be willing to grant you a waiver.
It’s only a 15 line macro though, so most implementations will be more or less the same.
Alternatively I could describe the interface / usage.
Up to you.#2021-03-1810:20henryw374hmm, yeah not my area of expertise I'm afraid. looking here, https://resources.whitesourcesoftware.com/blog-whitesource/top-10-eclipse-public-license-questions-answered it looks like they are not compatible - apache is more permissive. if you can post a gist for now with the license header that'd be ok?
or, I'm supposed to be meeting Malcolm later so I can ask him. he uses MIT for all new stuff, which afaik is even more permissive than apache#2021-03-1810:22rickmoynihanYeah MIT is pretty unencumbered, so you’d be ok in that case.
I suspect malcolm will be happy to grant it, and just have the code used, but it’s totally his choice.#2021-03-1810:23rickmoynihanOf course if you don’t care strongly about the license you could also just move to EPL, MIT or public domain.#2021-03-1810:23rickmoynihanbut it’ll probably only take you 10/20 mins to implement the macro yourself 🙂#2021-03-1810:26henryw374I find it hard to say no to at least looking at working code. :)
MIT wouldn't work, as that is less compatible.
I'll ask him and ping you back thanks#2021-03-1810:29rickmoynihanYes sorry MIT definitely won’t work for you using this code.#2021-03-1810:30rickmoynihanunless malcolm were to explicitly grant permission to you under the license you choose.#2021-03-1810:31rickmoynihanhttps://gist.github.com/RickMoynihan/8714a86f7f1f30b22136597305e50ca4#2021-03-1810:31henryw374cheers#2021-03-1810:31rickmoynihanhttps://github.com/henryw374/clojure.log4j2/issues/1#2021-03-1815:14chrisnHere is a simple video encoding library for Clojure: https://github.com/cnuernber/avclj
I wrote this as an example of how simple interfacing with C systems can be and to show how nice using the deps.edn pathway is for a clojure library. It sits directly on top of the libavcodec series of shared libraries used by ffmpeg - it loads them dynamically and then you pass frames directly to the library. I have included a simple example of using Skija to render to a native buffer that is then passed directly into the encode-frame! method. Use this if you have a need to render videos of your crazy Clojure pixel art 🙂.#2021-03-1818:37phronmophobicThis is really neat! Would it be possible to make a simple video player using avclj?#2021-03-1819:15chrisnYes it would be possible. The decode pathways in my opinion are much harder than the encode pathways but all the necessary pieces are there. I could provide a function that gives you a sequence of close-able buffer objects or something that had each frame's information such as the image, the microsecond time and duration.
The waters are fairly deep with FFmpeg; the encoder took a lot of head scratching before it produced videos that worked on cellphones.#2021-03-1820:28phronmophobicFFmpeg is such a useful library, it's something I've been meaning to dive into myself. I'm familiar with jna and it would probably be good for me to also learn from how you've been using jna based off your excellent work with libpython-clj. I'll check it out and see how it goes.#2021-03-1820:30phronmophobicwow, I did not know about this trick, https://github.com/cnuernber/avclj/blob/master/cpptest/compile64.sh#L1
Very cool. I've been using python-clang to try to get struct info.#2021-03-1820:42phronmophobic🤯 , this stuff is awesome, https://cnuernber.github.io/dtype-next/tech.v3.datatype.ffi.html. Is the ffi stuff graalvm compatible?#2021-03-1822:03chrisnNot at this time. I am working on it right now. It is JNA and JDK-16 compatible.#2021-03-1822:05phronmophobicWell, either way, there's some really great c interop code here and I look forward to simplifying some of my c interop code in the future. Thanks! :thumbsup:#2021-03-1822:10chrisnYou are so welcome! I will post of course when I get a graal native pathway working. The target is some clojure code along with some python stuff all wrapped up into a graal native shared library that is then loaded via cython.#2021-03-1822:17phronmophobicEventually, I'd like to be able to spit out apps a shared library that can be loaded and ran on mobile using a prebuilt iOS/android app#2021-03-1815:18Adam HelinsDear friends, a new much improved version of BinF, a Clojure/script library for handling any kind of binary formats /protocols in a simple yet powerful way.
I've used it with great success for things like MIDI processing and a WebAssembly decompiler. I find it really capable, flexible, and feature-rich. It provides probably more than you need.
Hope it will sprout new super use cases: https://github.com/helins/binf.cljc#2021-03-1818:25cassielNice. I have a Node-hosted sysex librarian to finish. This could well be useful.#2021-03-1818:33dcjThis looks great!
I also nominate your READMEs description of your support for 64-bit integers for the "README Hall of Fame":
It is not the most beautiful experience one will encounter in the course of a lifetime but it works and does the job pretty efficiently.
#2021-03-1822:57Adam HelinsThen I shall accept the honor!#2021-03-1910:28cassielThe award will, of course, be in binary.#2021-03-1819:20Alex Miller (Clojure team)After a slight delay, https://clojure.org/releases/devchangelog#v1.11.0-alpha1 is now available!
• https://clojure.atlassian.net/browse/CLJ-2603 Clojure keyword argument functions now also accept a map, see https://clojure.org/news/2021/03/18/apis-serving-people-and-programs
#2021-03-1819:28seancorfielduser=> (let [[& {:keys [a b] :as opts}] [{:a 1 :b 2}]] [a b opts])
[1 2 {:a 1, :b 2}]
user=> (let [[& {:keys [a b] :as opts}] [:a 1 :b 2]] [a b opts])
[1 2 {:a 1, :b 2}]#2021-03-1819:29seancorfieldCompared to 1.10.3:
Clojure 1.10.3
user=> (let [[& {:keys [a b] :as opts}] [{:a 1 :b 2}]] [a b opts])
Execution error (IllegalArgumentException) at user/eval140 (REPL:1).
No value supplied for key: {:a 1, :b 2}
user=> (let [[& {:keys [a b] :as opts}] [:a 1 :b 2]] [a b opts])
[1 2 {:b 2, :a 1}]#2021-03-1819:29seancorfieldSo, no, it changes destructuring “everywhere”.#2021-03-1819:30seancorfield@U050CT4HR You’re trying to destructuring a sequence as a map — the change in 1.11 is the other way round, effectively, destructuring a map as a sequence of named arguments.#2021-03-1819:31seancorfieldI will update us to 1.11 Alpha 1 at work and see if it breaks anything!#2021-03-1819:52Alex Miller (Clojure team)I should also mention that the destructuring docs have also been updated (they actually never had been updated to include keyword argument support and there were no published semantics about that anywhere). Also, the doc has been extended to cover this new 1.11 capability
https://clojure.org/reference/special_forms#keyword-arguments#2021-03-1820:51hlshipThis seems like a clever little change though to be honest I don't like the kw-args approach, I'm always happy enough to just use an optional map parameter on my functions. A lot of confusion to save two characters. It's feels like a rare example of Clojure doing something "to be cool looking" (the kw args in the first place, not this new change).#2021-03-1820:52hlshipAlso, I think the example in the release notes would be slightly more useful if it showed a mix of kw args and a map.#2021-03-1822:48vemvIs there a performance difference between using the new & and no & at all? (i.e. a vanilla, fixed map arg)#2021-03-1906:15Alex Miller (Clojure team)well you're comparing doing work and not doing work, and usually doing work has some cost, so yes#2021-03-1906:19Alex Miller (Clojure team)although kwarg destructuring in general is significantly faster than it was due to the other changes in the patch#2021-03-1906:25Alex Miller (Clojure team)given something like (defn foo [& {:as m}] (count m)) , running (time (dotimes [_ 500000] (foo :a 1 :b 2))) a few times shows best case around 70 ms on 1.10.3 and 14 ms on 1.11.0-alpha1. vs (defn foo-m [m] (count m)) and (time (dotimes [_ 500000] (foo-m {:a 1 :b 2}))) of around 7.5 ms.#2021-03-1906:31Alex Miller (Clojure team)there's a lot of "it depends" in those numbers, but might give you some idea#2021-03-1908:05vemvThanks, that's useful!
I asked partly because I was under the impression that for the following programmer intent:
(defn foo [& {:keys [a b c]}])
...one could emit internally two arities. In Clojure pseudocode:
(defn foo
([m])
([k v & kvs]))
The point being, if you invoke the arity 1 (by using {} caller-side instead of kwargs), you'd get the best possible performance.
Which would seem a sweet spot: one can opt to consume defns in a more performant way, while keeping full flexibility.#2021-03-1908:06Alex Miller (Clojure team)yes, that was one of many options we considered#2021-03-1907:56slipsetI’m very honoured to announce the release of https://github.com/clojure/data.json/releases/tag/data.json-2.0.0 .
Thanks to @alexmiller for inspiration and guidance during this work!
This release introduces significant speed improvements in both reading and writing json, while still being a pure clojure lib with no external dependencies.
Using the benchmark data from jsonista we see the following improvement:
Reading:
• 10b from 1.4 µs to 609 ns (cheshire 995 ns)
• 100b from 4.6 µs to 2.4 µs (cheshire 1.9 µs)
• 1k from 26.2 µs to 13.3 µs (cheshire 10.2 µs)
• 10k from 292.6 µs to 157.3 µs (cheshire 93.1 µs)
• 100k from 2.8 ms to 1.5 ms (cheshire 918.2 µs)
Writing
• 10b from 2.3 µs to 590 ns (cheshire 1.0 µs)
• 100b from 7.3 µs to 2.7 µs (cheshire 2.5 µs)
• 1k from 41.3 µs to 14.3 µs (cheshire 9.4 µs)
• 10k from 508 µs to 161 µs (cheshire 105.3 µs)
• 100k from 4.4 ms to 1.5 ms (cheshire 1.17 ms)#2021-03-1908:10borkdude@U04V5VAUN are you sure this is correct?
> 10k from 508 µs to 161 µs (cheshire 105.3 ms)#2021-03-1908:11borkdude161 µs vs 105.3 /ms/ ?#2021-03-1908:11slipsetno#2021-03-1908:12slipsetFixed#2021-03-1908:17ikitommiGreat work! Will rerun the benchmarks on jsonista repo with the new version#2021-03-1908:18borkdudeFWIW there are also some new patches in cheshire master (with new Jackson) so it would be good to run against cheshire master and not the currently released version#2021-03-1908:18slipsetjsonista is still faster though 🙂#2021-03-1908:18borkdudee.g. writing became 15% faster#2021-03-1908:27ikitommirunning with the latests now.#2021-03-1908:48nilernMost people will be using the latest jar though#2021-03-1909:40jmayaalvthis is great! 😍#2021-03-1909:46rickmoynihan@U04V5VAUN fantastic! Care to elaborate on the tricks you used to speed it up?#2021-03-1910:03slipset1. remove the dynamic vars and pass them explicitly as an options map
2. for reading, split reading strings into two paths, the quick one (without any escapes), you do with passing an array slice to (String.), the slow one (with escapes and unicode and stuff) you still do with Stringbuilder
3. for writing, don’t use format to construct unicode escapes
The main trick though was to use the stuff in http://clojure-goes-fast.com
ie, profile, observe the results, form a hypothesis, create a fix 🙂#2021-03-1910:11rickmoynihanYeah I’d taken a quick peak, and was mainly interested in hearing about 2 and 3. I entirely agree with the other advice too though! :thumbsup: :thumbsup:
I’ve noticed in the past that unicode processing is often the slow bit in parsing large amounts of data. Also the performance difference between InputStream and Reader is staggering… mainly I believe because reader does that unicode stuff, and expands all characters into 16bits. So was curious how you were alleviating that.
I’ve never tried parsing json, so know next to nothing about it; but I was trying to understand how you knew whether you needed to use unicode or not. I’m guessing you know you only need to handle unicode for strings inside the json?!, not the structure itself. Is that correct?!#2021-03-1910:27roklenarcicI was looking at the commit that replaced dynamic vars with options map. Couldn’t you have saved up even more time if internal functions like read-object received key-fn and value-fn as an argument instead of the whole options map and performing a map get?#2021-03-1910:28nilerndata.json takes a Reader, I think @U04V5VAUN just meant Unicode escapes inside strings#2021-03-1910:30borkdudeavoiding apply and merge could possibly also help#2021-03-1910:30roklenarcicAnother observation: couldn’t you capture the values of dynamic vars in a map at the start of the public functions like write-str and then you don’t get hit with dynamic var cost because you don’t access it repeatedly#2021-03-1910:31rickmoynihan@U4MB6UKDL: Yes I know. I was alluding to that too.
I mention InputStream/Reader as something observed in my own work, and in support of the general point that handling unicode is slow.#2021-03-1910:31ikitommithe old:
jsonista.jmh/encode-data-json :encode :throughput 5 406998.934 ops/s 152242.102 {:size "10b"}
jsonista.jmh/encode-data-json :encode :throughput 5 146750.626 ops/s 13532.113 {:size "100b"}
jsonista.jmh/encode-data-json :encode :throughput 5 28543.913 ops/s 5982.429 {:size "1k"}
jsonista.jmh/encode-data-json :encode :throughput 5 1994.604 ops/s 193.798 {:size "10k"}
jsonista.jmh/encode-data-json :encode :throughput 5 229.534 ops/s 3.574 {:size "100k"}#2021-03-1910:31ikitommithe new:
jsonista.jmh/encode-data-json :encode :throughput 5 1534830.890 ops/s 155359.246 {:size "10b"}
jsonista.jmh/encode-data-json :encode :throughput 5 341613.782 ops/s 26261.051 {:size "100b"}
jsonista.jmh/encode-data-json :encode :throughput 5 69673.326 ops/s 1647.625 {:size "1k"}
jsonista.jmh/encode-data-json :encode :throughput 5 5658.247 ops/s 999.701 {:size "10k"}
jsonista.jmh/encode-data-json :encode :throughput 5 581.924 ops/s 39.758 {:size "100k"}#2021-03-1910:31ikitommi=> 2.5x throughtput improvement 🚀#2021-03-1910:31ikitommijsonista:
jsonista.jmh/encode-jsonista :encode :throughput 5 6718559.441 ops/s 564494.417 {:size "10b"}
jsonista.jmh/encode-jsonista :encode :throughput 5 2021530.135 ops/s 227934.280 {:size "100b"}
jsonista.jmh/encode-jsonista :encode :throughput 5 358639.582 ops/s 33561.700 {:size "1k"}
jsonista.jmh/encode-jsonista :encode :throughput 5 32536.978 ops/s 8135.004 {:size "10k"}
jsonista.jmh/encode-jsonista :encode :throughput 5 2687.242 ops/s 185.516 {:size "100k"}#2021-03-1910:32ikitommistill much faster, but it’s 99% java.#2021-03-1910:33nilernJackson (and simdjson) can do their own UTF-8 decoding while parsing from a byte stream. All the structural JSON characters are ASCII so yes Unicode is only really relevant inside strings.#2021-03-1910:34slipset@U4MB6UKDL my initial patch had value-fn and key-fn passed as separate params, but that doesn’t really scale well (if you imagine passing more opts in the future). Also, the penalty from apply and array-map only shows on the smaller payloads, so it was probably worth the tradeoff.#2021-03-1910:35slipsethttps://clojure.atlassian.net/browse/DJSON-32#2021-03-1910:35nilern(I think you meant @U66G3SGP5)#2021-03-1910:36slipsetI most certainly did. Sorry.#2021-03-1910:39rickmoynihanhas some slack weirdness happened in this thread?!
Some comments appear to have disappeared and replies now appear out of context e.g. my comment above was in response to something @U4MB6UKDL said which has also vanished.#2021-03-1910:46nilernNothing has vanished AFAICT. Try refreshing your browser?#2021-03-1910:47rickmoynihan:thumbsup: I’d done that, but doing it a second time seems to have fixed it.#2021-03-1912:21ikitomminew jmh-benchmarks on jsonista repo: https://github.com/metosin/jsonista#performance#2021-03-1913:41Ben Slessvery cool!
Looks like some more % can be shaved off by using identical? and == instead of = where possible. Especially using identical?, as the documentation says "If value-fn returns itself" - can you assume it's the same object?#2021-03-1914:39Alex Miller (Clojure team)an excellent way to work on problems is to write them down in a trackable place like https://ask.clojure.org or jira (if you have access)#2021-03-1914:40Alex Miller (Clojure team)Changelog for 2.0.0 fyi:
• Perf https://clojure.atlassian.net/browse/DJSON-35: Replace PrintWriter with more generic Appendable, reduce wrapping
• Perf https://clojure.atlassian.net/browse/DJSON-34: More efficient writing for common path
• Perf https://clojure.atlassian.net/browse/DJSON-32: Use option map instead of dynamic variables (affects read+write)
• Perf https://clojure.atlassian.net/browse/DJSON-33: Improve speed of reading JSON strings
• Fix https://clojure.atlassian.net/browse/DJSON-30: Fix bad test#2021-03-1914:55Ben Slessyou're right. I still need to open a jira on update-in's performance, too#2021-03-1912:16slipsetUnfortunately, there is a bug in the above release wrt to strings being longer than 64 chars, so do not use version 2.0.0, rather wait for 2.0.1 🥵#2021-03-1912:18otfromouch... solidarity and hugops#2021-03-1912:19borkdudeThe pure Clojure JSON ecosystem now rests on your shoulders slipset... take care!#2021-03-1912:26littlelistay strong! It's great effort. I personally would use pure library over java interop whenever possible.#2021-03-1912:37borkdudeBtw, I wondered if there is some JSON standard compliance test suit that these kinds of libs should be ran against#2021-03-1912:37borkdudeindependent of their implementation#2021-03-1912:46steffanPerhaps https://github.com/nst/JSONTestSuite#2021-03-1912:46borkdudeexcellent, I will post an issue at the cheshire side as well about this#2021-03-1913:23Noah Bogartas linked in that repo, i would highly recommend reading this blog post about json parsing ambiguities: http://seriot.ch/parsing_json.php#2021-03-1914:36Alex Miller (Clojure team)if anyone is interested in working on things like this, please join the club! would be happy to have help on this#2021-03-1914:38Alex Miller (Clojure team)data.json 2.0.1 is now available
• Fix https://clojure.atlassian.net/browse/DJSON-37: Fix off-by-one error reading long strings, regression in 2.0.0#2021-03-1914:49borkdude@U04V5VAUN Congrats on the fix 😅 Does this affect the benchmarks?#2021-03-1914:51Alex Miller (Clojure team)doubt it#2021-03-1918:49chrisnI tested dtype-next's ffi generation with graal native and avclj. After a bit of work (a couple days) I can now generate a graal native executable that encodes video 🙂.
https://github.com/cnuernber/avclj#2021-03-2013:35Adam HelinsSlight update to Void, a CLJC library for handling nil (especially with collections): https://github.com/helins/void.cljc#2021-03-2108:15Vincent Cantin(= (void/assoc {:a 42}
:a nil
:b 42)
{:a 42
:b 42})
this is surprising, I would expect {:b 42} instead, in a way consistent with your update function.#2021-03-2118:55metasoarousI had the same thought @U8MJBRSR5; Seems inconsistent with respect to whether nil clears out a k/v pair or just doesn't update.#2021-03-2214:17Vincent Cantincc @UCFG3SDFV#2021-03-2214:56Adam HelinsIndeed, assoc is a no-op in case of nil. What you describe is its sibling, assoc-strict, which does that :)
I guess it should be better examplified in the README.#2021-03-2121:23borkdudeFriendly general reminder that there is also a #releases channel in which you can announce minor updates and bug fix releases.#2021-03-2123:51ericdalloHey all, it's been a while since last clojure-lsp clojure-lsp announcement, so here are the latest recent features added:
• New code actions 🎉 Thread first/last all, Create private function , Resolve macro as...
• New custom linter: New custom linter: unused-public-var
• Support for Signature help
• We have a new way to install clojure-lsp via https://github.com/clojure-lsp/homebrew-brew that is updated automatically! catjam (kudos @andre.peric)
• completion improvement fixing a lot of issues
For more information, reach us on #lsp clojure-lsp#2021-03-2200:31wilkerlucioHello, Pathom Viz 2021.03.21 just got out! This release adds the ability to view the plan snapshots from your queries. In Pathom 3 there is the planner, who builds up the execution graph. Before this version you could see the graph nodes from a ready plan. With this update you can also see a step by step process of how the plan itself was built. This is useful to debug all sorts of planning errors, as you can see closely how Pathom does it. To try this feature, remember to use the latest pathom-viz-connector, and also the latest Pathom (and of course, the latest pathom-viz). https://github.com/wilkerlucio/pathom-viz/releases/tag/v2021.3.21#2021-03-2314:22bruno.bonacciJust released µ/log-v0.7.1 - "μ/log (Pronounced: /mjuːlog/) is a micro-logging library that logs events and data, not words!"
https://github.com/BrunoBonacci/mulog
• [NEW] Added https://cljdoc.org/d/com.brunobonacci/mulog/0.7.1/doc/samplers/jmx-mbean-metrics-sampling to capture/sample the value of MBeans.
• [NEW] Added https://cljdoc.org/d/com.brunobonacci/mulog/0.7.1/doc/samplers/kafka-metrics-sampling to sample metrics from Kafka apps
• Added support for GraalVM native compilation#2021-03-2314:28ericdalloAnnouncing deps-bin 🎉 - Generate a executable embedded jar from a jar file via clojure cli.
It's a simpler port from lein-binplus to deps.edn
https://github.com/ericdallo/deps-bin#2021-03-2401:46danielcomptonClojurists Together wants to hear from you on what we could be doing differently. We're running a public survey for OSS Clojure devs to hear more about what you need and how we can serve you better. Check it out! clojurists-together
https://www.clojuriststogether.org/news/listening-to-maintainers-for-the-next-phase-of-clojurists-together/#2021-03-2401:51ericdalloCool!
I'm receiving a permission error on the public survey though 😅#2021-03-2401:54danielcomptonOops, thanks! I've fixed that now#2021-03-2409:59Adam HelinsRefreshed version of this I2C library for your IOT projects ; talking to sensors and such from Clojure JVM : https://github.com/helins/linux.i2c.clj
Also "sub-libraries" targetting specific devices such as the BME280 sensor (see README) 😉#2021-03-2411:31chrisnI remember years of building linux kernels and adding in the I2C-bit banging module 🙂. Really cool to see some low-level love here 🙂.#2021-03-2412:15Adam HelinsYes, with Clojure spreading around, I hope to see more works like that. Those libs are not new but it's true they are a bit expert-friendly, also because the JVM wasn't making things easy when it came to talking to the OS, using native code, etc#2021-03-2412:17chrisnNo kidding. Great direction 🙂.#2021-03-2411:35chrisnWe have a new blog post talking specifically about the FFI architecture in dtype-next. Write some code that accesses C libraries and runs across JDK-8 with JNA, JDK-16 with JEP-191, and the Graal Native. This is the architecture behind clj-python and my example avclj library.
https://techascent.com/blog/next-gen-native.html#2021-03-2412:28Adam HelinsI believe this is actually very important work. Historically, it has been hard to leverage native tooling but the few examples we have are, in my opinion, authentic success stories (eg. Neandertal).
With BinF, I did some work on having "C-like ABI" tooling as well. It is essentially about describing composite types as EDN, although it was not the primary goal. A small example: https://github.com/helins/binf.cljc/blob/main/src/example/helins/binf/example/cabi.cljc
It is not a complete solution such as what you show, it's more about having very basic building blocks so that many things can me implemented on top.
I mention all that because I focused on being CLJS friendly as I believe strongly in WebAssembly. Imagine using native libraries/utils both from Clojure JVM and CLJS browser exactly in the same way. It would definitely be a killer feature.
Goal-wise, BinF and Dtype seem to be different. Binf is rather "protocol-oriented" while Dtype is rather "math/performance" oriented. But when it comes to that ABI stuff, maybe there is some synergy to be found, especially when it comes to targetting WASM.#2021-03-2412:33martinklepsch@UDRJMEFSN random feedback for that blog site: make the icon link to the homepage please 🙂#2021-03-2413:01chrisn@U050TNB9F - Great feedback 🙂. Will do!
@UCFG3SDFV - I have thought about extending dtype to the browser and there was ages ago some level of effort there but learning the intricacies of the JVM in order to compete with the spark ecosystem sort of made that go away. I am not sure the architecture would even work on the browser; it relies on very fast virtual calls in some situations which the browser's javascript engine often does extremely poorly.
I agree with the insight that WASM is a unifying direction for both; I have thought before that the JVM should have first class support for WASM itself which it kind of does through GraalVM but I think it should be a JEP and part of the main codebase.
There is definitely space in there for us to work together and talk about our directions as they are very similar in a lot of respects.#2021-03-2413:09chrisnIn avclj I have an example of using https://github.com/cnuernber/avclj/blob/master/src/avclj/av_context.clj and using those to create struct definitions that are very similar to your binf work.#2021-03-2413:55Adam HelinsDefinitely some overlapping, nice example! Funny how things converge, a few days ago I was messing ffmpeg (decompiling ffmpeg-wasm with a lib I'll release "soon"). It is a very good target for testing/developing that kind of tooling.
Is there a "lower-level" facility for describing those layouts besides text? One of the reason I preferred working with fns and EDN right away, abstracting primitive types, was to be more language agnostic (eg. being more friendly towards Rust).
Another argument towards trying to be more agnostic/programmatic for describing composite types, when it comes to WASM, is interface types. I am not sure yet but I believe it could be possible to "easily" decompile a lib such as ffmpeg-wasm and automatically generate such struct descriptions in some situations.#2021-03-2413:58chrisnYes for sure - https://cnuernber.github.io/dtype-next/tech.v3.datatype.struct.html#2021-03-2413:59chrisnActually the documentation for that namespace is lacking. The clang namespace uses the low-level api:
https://cnuernber.github.io/dtype-next/tech.v3.datatype.ffi.clang.html#2021-03-2413:35Adam HelinsToday seems to be "native tooling day".
Here is another refresh, a GPIO (General-Purpose Input Output) library for your IOT projects: https://github.com/helins/linux.gpio.clj
Eg. Handling pins on a Raspberry Pi from Clojure JVM
(I had to migrate some underlying Java libs from Bintray, I took some time to "modernize" those libs)#2021-03-2422:57cheppreyI wanted to check the cljdoc link but it returns an error: An exception occurred, sorry about that!#2021-03-2422:59cheppreyI'm just curious if the new api lets you set the pulldown resistor on an input. My clojure rpi project just used sysfs gpio for everything, but I had to get wiringpi installed and initialize the pulldowns manually when the pi boots up.#2021-03-2422:59cheppreyNew library looks cool btw. Thanks!#2021-03-2507:53Adam Helins@UHL84CDTP Thanks, updated second Cljdoc link which was indeed faulty
Pullup/down depends on the Linux API. This library is based on version 1 of that API. I know there was/is a version 2 in progress which, I believe, add explicit support for that, but I don't think it's out yet.#2021-03-2415:07Lucy WangJust added https://lucywang000.github.io/clj-statecharts/docs/parallel-states/ (a.k.a concurrent states) support to https://github.com/lucywang000/clj-statecharts, the State Machine and StateCharts for Clojure(Script).
The value proposition of Parallel States becomes more and more prominent when the applications UI gets more complex.
What's more, this is a major rewrite of the internals (used a lot of the reference algorithm in the https://www.w3.org/TR/scxml/#AlgorithmforSCXMLInterpretation instead of my own one, because the latter is awkward to implement parallel states feature. All the https://github.com/lucywang000/clj-statecharts/blob/master/test/statecharts/impl_test.cljc still pass, even the core impl code has more than 50% changed!
I have not cut a release yet, so the version number is still 0.0.1-SNAPSHOT. Don't be scared by that, though, because I have been using it in commodity futures trading for almost half a year now 🙂#2021-03-2423:35eccentric JCongrats! Contemplated writing a cljs adaptation myself after a friend shared xstate with me but you beat me to it. Looks solid too, excited to give it a shot. 🏆#2021-03-2500:53Lucy WangYeah I thought of that way too, xstate is just fabulous. But I believe statecharts could be more widely used in both clj & cljs so I decided to roll my own. Still lots of the API design is borrowed from or inspired by xstate.#2021-03-2502:55Lucy WangHere is an excellent article about making use of the parallel states features (and other
features) of clj-statecharts: https://doughamil.github.io/gamedev/2021/03/24/statecharts-for-animation.html .#2021-03-2508:23simongrayHey Lucy, just wanted to say that I really like your introductory documentation @ https://statecharts.github.io/ - it’s great to have the trade-offs listed upfront.
The README in the github repo says that it has first-class Re-frame integration. Would you lose something significant if you don’t want use Re-frame in the frontend then?#2021-03-2511:37Lucy Wang@U4P4NREBY the https://statecharts.github.io/ website is not my work 🙂
regarding re-frame integration, the core of clj-statecharts is pure function - the transition function, or a math formula
[actions, next-state] = f(current state, event)
The re-frame integration is just some higher level helpers on top of that. I use it in a few of my own projects and find it a good pattern, so I include it in the library hoping it could be useful for others too. You can safely ignore that module if you don't use re-frame or want to roll your own way.#2021-03-2614:49Jarrod Taylor (Clojure team)Big enhancement to https://github.com/JarrodCTaylor/schema-cartographer
Noteworthy points about the release:
1) Works with Datomic Cloud, On-Prem and Dev-Local.
2) Can generate a schema diagram for ANY existing Datomic database!#2021-03-2615:30viestihttps://github.com/viesti/timbre-json-appender now supports passing map as argument to logging call in version 0.2.0. Thanks @charliebriggs!#2021-03-2621:58bringeCalva's latest version, 2.0.182, uses the graalvm-compiled native binaries for clojure-lsp. You can now experience lower startup time, CPU usage, and memory usage of clojure-lsp when using Calva.
calva ❤️ clojure-lsp
Join us in #calva if you want to chat. simple_smile#2021-03-2712:29Adam HelinsDears friends, a novel and powerful CLJC library for interval trees: https://github.com/helins/interval.cljc
From geometry to genomic analysis, many data science possibilities.
These implementations are very flexible. I used them extensively for music analysis (detecting chords, analysing exactly how a musician plays, ...)#2021-03-2716:44Jakub Holý (HolyJak)Typo in the Readme : "Querying a point an interval map"#2021-03-2713:10Alex Miller (Clojure team)org.clojure/data.json release 2.0.2
• Fix https://clojure.atlassian.net/browse/DJSON-38: Type-hint return type of write-str
• Fix https://clojure.atlassian.net/browse/DJSON-40: Make named argument passing compatible with new
#2021-03-2800:12practicalli-johnpracticalli/spacemacs.d configuration has been updated with a minimal LSP configuration, providing a smooth integration between CIDER and some of the many possible LSP features and UI elements for Emacs.
https://clojurians.slack.com/archives/C09C8GRLY/p1616890208038700#2021-03-2814:40LuFork, a non intrusive CLJS form lib. Some new interesting features in v2.4.0:
• Any number of nested field arrays is supported -> https://github.com/luciodale/fork/blob/master/examples/fieldarray.cljs
• Drag and Drop functionality to allow field array items to be re-ordered -> one liner `(drag-and-drop-handlers :key idx)`
https://github.com/luciodale/fork#2021-03-2913:57chrisnhttps://github.com/techascent/tech.ml.dataset has some great new features and capabilities. How often have you seen a Clojure system that soundly beats C, Julia, Python, Spark, and R systems in a https://github.com/zero-one-group/geni-performance-benchmark?
We have gone further down the https://techascent.github.io/tech.ml.dataset/tech.v3.dataset.reductions.html by adding statistical operations, called colloquially https://datasketches.apache.org/, that give you memory efficient and accurate probabilistic estimates for some statistical operations including algorithms such as https://techascent.github.io/tech.ml.dataset/tech.v3.dataset.reductions.apache-data-sketch.html#var-prob-set-cardinality and https://techascent.github.io/tech.ml.dataset/tech.v3.dataset.reductions.html#var-prob-quantile.
So, if you want to process GB's of data in minutes or seconds on commodity hardware, check us out: https://github.com/techascent/tech.ml.dataset#2021-03-2914:23ordnungswidrigThis is great work. I used it on nextjournal to get my some graphs for the covid-19 pandemic for my local counties. I had to fiddle around a little but I think .dataset and nextjournal and vega are an awesome toolset.
https://nextjournal.com/ordnungswidrig/covid-19-in-neu-ulm-experimental#2021-03-2914:28chrisnI had no idea! Thanks for letting me know 🙂#2021-03-2918:05Jakub Holý (HolyJak)Wow#2021-03-3120:01stathissiderisPlayed with http://tech.ml.dataset last week and I was really impressed. I showed it to the Python people in my org, they didn’t expect that sort of perf 😉#2021-04-0112:34otfromI've been really happy with the balance between speed and API sweetness for the stuff I've been doing. Elapsed time and memory is great compared to my transducer work#2021-04-0113:36chrisnThis feedback is really great and very encouraging. The API sweetness mostly all @U1EP3BZ3Q.#2021-04-0113:39genmeblogThank you. We've put a lot of effort to make it happen.#2021-03-3102:26mikethompsonAnnouncing a shadow-cljs "build hook" to automatically inject the ambient git version into your production app.
https://github.com/day8/shadow-git-inject#2021-03-3123:19AzzuriteIf you use server side rendering (and want to display that version) then you'd probably need to write your own implementation of getting that value, right? or could you use that library in your clj code?#2021-03-3123:43mikethompsonYeah, this library is targeted at shadow-cljs and the clients, not servers.
Depending on your server side build chain, you might be able to use our sibling library for Lein which does the same thing:
https://github.com/day8/lein-git-inject#2021-04-0110:22John McNicholasComing up later this month is the https://bit.ly/2NTZG8F, where you can hear the latest research & advancements from experts at Facebook, DeepMind, McDonald's, Amazon, Nestlé, Deepgram, Cisco, OpenText & more!
💬 Topics covered include:
• Toward Lifelong Conversational AI
• NLU & Computer Vision
• Generic ASR Will Never be Accurate Enough for Conversational AI
• Extracting Conversation Highlights Using Dialog Acts
• Cross-Lingual Transfer Learning
📌 View the agenda in full: https://bit.ly/2NTZG8F
➡️ Book your discounted ticket here: https://bit.ly/2NTZG8F#2021-04-0110:30borkdudeThis probably belongs in #events, not here#2021-04-0111:10ghadiIt probably doesn't belong in this slack at all#2021-04-0112:05martinklepschdeleting#2021-04-0113:29mkvlrhttps://github.com/nextjournal/beholder is the directory watcher from https://github.com/vouch-opensource/krell as a small standalone library. As a good Clojure library, it’s hatching from its 🥚 at v1.0.0 today, with the hope of it never needing to change again. 🤞
It’s built on top of https://github.com/gmethvin/directory-watcher to fix the still unsatisfactory performance of the JDKs built-in file watcher on macOS. Thanks @dnolen for the initial development and the kind permission to extract it. 🙏#2021-04-0113:31cassielIn the README: should (beholder/stop watcher) be (beholder/stop beholder)?#2021-04-0113:33mkvlrugh, yes! there comes the first change 🙈#2021-04-0113:33mkvlrbut only to the readme hopefully#2021-04-0113:34mkvlr@U6BUSDFMX thank you, fixed https://github.com/nextjournal/beholder#usage#2021-04-0113:35cassielI should have pull-requested it, I suppose…#2021-04-0113:37cassielAnd… probably a stupid question (or one I should test). When you have a watcher running, does it prevent JVM exit?#2021-04-0114:10mkvlrit should not#2021-04-0114:26athomasoriginalVery cool! Does Krell now use this library as well? (I know I could answer this Q by checking, but just felt like asking)#2021-04-0114:34mkvlr@U6GNVEWQG not today, still using https://github.com/vouch-opensource/krell/blob/master/src/krell/watcher.clj#2021-04-0119:15vemvthe https://github.com/jonase/eastwood/blob/master/changes.md#changes-from-0314-to-040 linter has a new release!
we've given it a push, fixing a number of years-long bugs. Importantly, a new `:ignored-faults` option is offered, allowing you to ignore specific instances of faults on a per-file/per-line basis.
This eases the possibility of using Eastwood as a hard CI check.
Followup in #eastwood - stay tuned for further fixes :)#2021-04-0514:52Karol Wójcik@U45T93RA6 how do you generate those changelog entries?#2021-04-0516:59vemvI did by hand :)#2021-04-0517:10vemvI think https://github.com/clojure-emacs/cider/blob/master/CHANGELOG.md was an inspiration#2021-04-0517:38Karol Wójcik@U45T93RA6 Huh. Will try to rigor myself to do the same. 😄 Thanks!#2021-04-0306:28seancorfieldcom.github.seancorfield/clj-new {:mvn/version "1.1.293"} — https://github.com/seancorfield/clj-new — The main new addition is the polylith template to create a new Polylith workspace with some minimal, working code. Follow-up in #clj-new #polylith or #tools-deps as appropriate!#2021-04-0513:57mauricio.szaboOk, after a long break, I just published new versions for both Chlorine and Clover, the socket-REPL package for Atom and VSCode. In this version, notable changes are some fixes for nREPL and Shadow-CLJS, and now both editors can detect ports if there's a .socket-repl-port on the root of the project. It'll also detect if there's an nREPL port, but it's behind a config toggle (because Chlorine/Clover works better with pure socket REPLs, so I don't want to "default to worse experience" really). Discussions on #chlorine-clover.#2021-04-0517:26Adam HelinsDear friends, something brand new for our ecosystem: a fully spec compliant WebAssembly compiler and decompiler, entirely in CLJC
https://github.com/helins/wasm.cljc
I hope it will sprout new crazy projects. It certainly could give to Clojurescript an interesting edge over JS. Who knows, maybe it will be used one day to bootstrap Clojure-WASM?
Furthermore, the whole WASM representation is defined using Malli schemas! Kudos to the Malli team for such a fine library, and special thanks to @ikitommi who was very prompt to add a couple needed features.
(PS: This is obviously very new and still alpha, but it is already pretty well tested and it works 🙂 )#2021-04-0518:36metasoarousThis is SO COOL! Thanks for working on this!#2021-04-0521:04respatializedA comment I saw a while back on LtU comes to mind:
> Language stacks inevitably have abstraction leaks. The lower level language leaks into the higher level one, whether by explicit embedding or various design assumptions.
>
> ...An intriguing alternative is to invert the stack.
>
> Start with a conventionally high-level language that has many nice properties except performance - composition, concurrency, reflection, automatic memory management, natural numbers with bignum arithmetic, caching, optimizing, etc.
>
> ...Such a language stack supports appropriate levels of abstraction/performance, but upon a more robust foundation.
http://lambda-the-ultimate.org/node/5590#comment-96320
it really seems like your work here demonstrates the viability of Clojure and malli as a sufficiently expressive combination to fill this particular niche. very cool stuff.#2021-04-0612:53Adam Helins@UFTRLDZEW Indeed, I feel right at home with those posts. And a bit later: "in order to invert the language stack, you need to separate the conceptual stack from the implementation stack, because with the latter we obviously have to have the low-level stuff at the bottom"
This is why I got a bit obsessed with WASM. It is an abstract language for an abstract machine, yet its execution (runtimes) is low-level. It is a unique opportunity for going as low as possible while caring for a single and unique target. Because we have that single target, it makes sense to build high-level tooling, we are building on a single foundation. Hopefully, that makes sense!#2021-04-0617:45Jakub Holý (HolyJak)You are on an incredible roll, @UCFG3SDFV! It almost looks like you have been borkdude-ified :-) Great work!#2021-04-0710:11Adam Helins@U0522TWDA Being borkdude-ified, genuinely an honour 😄
Yes, all this was stuff that was laying in the dark, I took some time to clean those projects and make public. Almost done, but not yet!#2021-04-0712:54ikitommiCongrats on the release! Linked the lib from malli README. Looking forward on the future of clj & wasm#2021-04-0518:46Karol WójcikNew version of holy-lambda 0.1.2. A micro framework for targeting both java/native AWS Lambda runtime using one code 🙂
Changelog: https://github.com/FieryCod/holy-lambda/blob/master/CHANGELOG.md
Repo: https://github.com/FieryCod/holy-lambda
Some examples: https://github.com/FieryCod/holy-lambda/blob/master/examples/hello-lambda/src/hello_lambda/core.clj
A real example: https://github.com/ekoontz/nlquiz
Incoming this month: support for interceptors and GraalVM-EE
All contributions welcome. #2021-04-0618:00Jakub Holý (HolyJak)FYI Cljdoc import has failed, says https://cljdoc.org/d/fierycod/holy-lambda/0.1.2/doc/1-01-installation#2021-04-0618:50Karol WójcikThanks @U0522TWDA I’m aware, but still there is nothing useful in docs :(. @U017Y2J9F0W will probably change the docs state by adding “getting started” guide.
#2021-04-0521:23Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.10.3.822 is now available
• Fix issue with git deps where new commits on branches were not fetched.
◦ Note: if you are having this issue, you should delete your ~/.gitlibs directory in addition to upgrading#2021-04-0614:57Alex Miller (Clojure team)At long last, the State of Clojure 2021 results are available ... https://clojure.org/news/2021/04/06/state-of-clojure-2021#2021-04-0615:41agile_geekInteresting to know if the increase in org size is correlated directly to use in financial services as I expect those to be the larger orgs who throw more developers at a project. I’m not entirely sure that is a good thing.#2021-04-0615:54Ben SlessIs there a way to access the raw results?#2021-04-0616:49simongray@UK0810AQ2 at the bottom of the page#2021-04-0616:51Ben Sless@U4P4NREBY those are the full results, not the raw results. A CSV would be nice#2021-04-0617:07Alex Miller (Clojure team)if you have need of something specific, dm and I can probably drop it out for you. I do not want to drop out anything that has full individual responses as they can be pretty de-anonymizing in combination#2021-04-0617:34seancorfieldInteresting to see the programming career length is split 50/50 between folks programming <10 years and >10 years (with a long tail out to 25+).#2021-04-0617:35seancorfield@U064X3EF3 Is there a channel where you’d prefer follow-up discussion happen about the survey results?#2021-04-0618:19Alex Miller (Clojure team)#clojure I guess?#2021-04-0618:22hlshipI'd have liked to see the charts showing the last three years or so, so that we could see the actual changes. The text might say "Clojure has seen large grownthin large companies" but a time series bar chart could actually show it to us.#2021-04-0618:24oliy26% of (clojurescript users?) don't have any tests!#2021-04-0618:28Alex Miller (Clojure team)@U04VDKC4G prior results all linked at the end (not disagreeing, I don't have time to make that chart atm but the data is there)#2021-04-0619:18Ben SlessI'm not interested in the free text/individual responses at all. Just wanted to analyze some of the trends#2021-04-0621:12Alex Miller (Clojure team)org.clojure/data.json 2.1.0 is available
• DJSON-39 - Add support for writing java.util.UUIDs (as strings) - thanks Erik Assum!#2021-04-0714:56Avi MehenwalClojureScript 1.10.844 is out! 🎉#2021-04-0715:02Noah Bogarthave a link for the change-log/announcement?#2021-04-0715:04jjttjjhttps://clojurescript.org/news/2021-04-06-release @UEENNMX0T#2021-04-0715:05Noah Bogartthank you!#2021-04-0809:04Ronny LøvtangenHold your horses if you are using Figwheel Main. I get lots of warnings at startup:
[Figwheel:WARNING] Compile Warning resources/public/js/dev/figwheel/repl.cljc line:52 column:17
Wrong number of args (1) passed to goog.log/getLogger
47 ;; goog.debug.Logger.Level.(SEVERE WARNING INFO CONFIG FINE FINER FINEST)
48 ;;
49 ;; set level (.setLevel logger )
50 ;; disable (.setCapturing log-console false)
51
52 (defonce logger (glog/getLogger "Figwheel REPL"))
^---
53
54 (defn ^:export console-logging []
55 (when-not (gobj/get goog.debug.Console "instance")
56 (let [c (goog.debug.Console.)]
57 ;; don't display time
[Figwheel:WARNING] Compile Warning resources/public/js/dev/figwheel/repl.cljc line:70 column:3
Wrong number of args (3) passed to goog.log/log
65 true))
66
67 (defonce log-console (console-logging))
68
69 (defn debug [msg]
70 (glog/log logger goog.debug.Logger.Level.FINEST msg))
^---
71
72 ;; TODO dev
73 #_(.setLevel logger goog.debug.Logger.Level.FINEST)
74
75 ;; --------------------------------------------------------------
#2021-04-0810:05Ronny LøvtangenThe release notes talks about these changes to the latest Closure Library#2021-04-1209:31Ronny LøvtangenFixed by figwheel-main 0.2.13, released yesterday.#2021-04-0815:53Sam RitchieSICMUtils 0.18.0 is out! As of today, the library can run everything from Sussman and Wisdom’s Functional Differential Geometry: http://xahlee.info/math/i/functional_geometry_2013_sussman_14322.pdf
As a wild example that I don’t have my head around yet (thanks for the code, GJS!), here are Einstein’s field equations in Clojure: https://github.com/sicmutils/sicmutils/blob/master/test/sicmutils/fdg/einstein_test.cljc#L40
This is a big milestone toward a complete port of the original, massive scmutils library from Gerald Sussman. There are a couple of large pieces to go, mostly around making the simplifier smoking fast… but the end is in sight. Once the port is done I’ll turn full focus toward expanding the system’s ability to drive animations in the browser, and generate beautiful Vega charts during interactive investigations of these physical systems and calculus on manifolds.
Here’s the CHANGELOG for the release: https://github.com/sicmutils/sicmutils/blob/master/CHANGELOG.md#0180
Come discuss in #sicmutils if any of this seems interesting!#2021-04-0816:18raspasovThis looks very impressive.#2021-04-0816:29Sam RitchieHappy to answer any questions or be a guide for the library; there really is a ton here.
CLJDocs are having trouble building, but here’s at least a skeletal overview of some of the library: https://cljdoc.org/d/sicmutils/sicmutils/0.18.0/doc/introduction#2021-04-0817:13Setzer22For those using malli and missing spec's instrumentation, I wrote this small thing today (very early version!) 😄 I plan to continue improving it in the following weeks as I use it: https://github.com/setzer22/malli-instrument#2021-04-0820:13donyormReleasing an alpha version of Clem -- a project to make clojure exception messages easier to understand, using a tool which integrates with users' REPLs. It's especially targeted at beginners, but I could use feedback from more experienced developers as well.
Gitlab: https://gitlab.com/unc-app-lab/clem-repl
ClojureVerse write up: https://clojureverse.org/t/introducing-clem-the-clojure-error-mediator/7468#2021-04-0820:20Umur GedikDoes it also helps with the clojurescript stack traces?#2021-04-0820:22donyormNot working with ClojureScript yet, obviously somewhere we'd like to go, but the tooling is different so it will be a fairly substantial project#2021-04-0820:23Umur GedikI see thanks anyway ^^#2021-04-0820:40ghadi@U1C03090C you've created https://clojurians-log.clojureverse.org/clojure/2018-03-28/1522263598.000890#2021-04-0820:41ghadicool!#2021-04-0820:43donyorm@U050ECB92 Dang that's exactly what we did, down to https://clojurians-log.clojureverse.org/clojure/2018-03-28/1522264623.000274 describing the infrastructure. I don't believe the original creator of Clem was active on this slack when it started, but definitely great minds thinking a like there :)#2021-04-0905:30emVery cool stuff! Is there any reason why this needs to be an online hosted server, rather than a downloadable local database of error messages? I'd imagine it's just useful for now to community outsource types of exceptions/error patterns etc., but to actually have people use this tool in more serious environments it should probably be entirely offline.#2021-04-0918:17donyorm@UNRDXKBNY Thanks! And that would probably be very useful, but at the moment the database simply doesn't exist. Part of why I'm sharing this with the community is Clem not only provides messages on errors, but also adds them to the database so we know they exist. It'll need a bit of time to build up a useful database. It's simply a datomic database, so I imagine once we have a somewhat usable basis of errors we could allow downloading it. (You can also try running your own instance, though it's really only set up to do that for dev setups)#2021-04-0904:17wilkerlucioReleased [com.wsscode/tailwind-garden "v2021.04.09"] 🎉 , if you like Garden CSS and Tailwind, this has all the definitions and some variant helpers. https://github.com/wilkerlucio/tailwind-garden#2021-04-0904:30indyThank you for doing this service! I understand purge just uses a regex to remove unused classes. Do you have suggestions on what the regex will look like if you use purge?#2021-04-0904:34wilkerlucioif you are going to setup a CSS processing pipeline, its probably better to stick with the official Tailwind build, specially with their new JIT thing, which is awesome 🙂
the target audience of this garden versions is for people that don’t want to mess with more node things#2021-04-0904:35wilkerluciothat said, I think would be the same thing, that depends more on what you are using to write the HTML. If using hiccup for example, something like :div.text-sm.bg-gray-400 may not work by default, but if you use [:div {:class "text-sm bg-gray-400"} it probably works out of the box#2021-04-0904:38indyWow, I just saw the JIT thing, will have to check how that can be leveraged. What I'm missing in CLJS with tailwind is autocomplete and purge (since the raw size is huge). But I think your tailwind-garden will give me more ideas.#2021-04-0904:40wilkerluciothere is this example configuration for tailwind jit with shadow: https://github.com/jacekschae/shadow-cljs-tailwindcss#2021-04-0904:46indyThanks a lot, will check this one out 🙂#2021-04-0915:51fjolne@UMPJRJU9E purge works fine for me in CLJS, for both hiccup notations#2021-04-0915:53fjolnewith the default setup from tailwind docs; IIRC it’s only triggered on release build, so beware to check bundle size diff against that#2021-04-0906:19msolliAnnouncing https://github.com/msolli/proletarian, a durable job queuing and worker system for Clojure backed by PostgreSQL. It provides at least once processing guarantees with customizable retry strategies.
Use Proletarian for asynchronously executing tasks in the background. It’s useful for offloading long-running tasks from the request thread in user-facing web applications.
The initial public release is https://clojars.org/msolli/proletarian. It’s in alpha since public scrutiny and adoption might necessitate API changes, but I consider Proletarian mostly done and ready for production use.
Please give it a spin! I’m happy to discuss and answer questions over at #proletarian.
Repo: https://github.com/msolli/proletarian
Simple example usage: https://cljdoc.org/d/msolli/proletarian/1.0.32-alpha/doc/example-a-the-basics#2021-04-0914:00lukaszLooks really cool! I made an attempt at something very similar a while back https://github.com/lukaszkorecki/taskmaster#2021-04-0915:22aviSuper cool! I was just looking for something like this a month ago… I ended up putting the project on hold so didn’t make a choice, but I was thinking of trying https://contribsys.com/faktory/ with https://github.com/apa512/clj-faktory. This is now bookmarked for next time I need something similar.#2021-04-0915:26avi@U06BEJGKD Kudos on the clear and comprehensive docs. Takes a lot of effort, and well worth it.#2021-04-0915:27aviAlso I like how it’s flexible enough to run the workers in the same VM as the rest of an app (e.g. a Web app/server) or in one or more discrete/dedicated VMs. Very nice!#2021-04-1007:57msolli@U69US348Z Thanks! Yeah, I’ve put some effort into the documentation. It really helps with the design process too, writing down how it’s supposed to work. Hope it can be helpful to you in the future!#2021-04-1213:56avi> It really helps with the design process too, writing down how it’s supposed to work.
+1000000#2021-04-1413:47danielszCool name#2021-04-0914:47chrisnI have an example of using .dataset including reading/writing parquet with graal native. I spent a bunch of time tracking down things that were making the build bigger/slower than necessary and reworked the parquet bindings so they would work with the latest parquet/hadoop ecosystem pieces. The example parses a csv, does some calculations, and the saves/loads from parquet to make sure everything is good - https://github.com/cnuernber/ds-graal.#2021-04-0914:48chrisnI should also say there getting that much working with the a full spark system perhaps not possible due to the fact that about 40% of the hadoop system finds it necessary to use reflection approximately every 10 lines 🙂.#2021-04-0916:24quollAsami 2.0.0 has been released.
Asami is a schema-less graph database for both Clojure and ClojureScript. Version 2.0.0 includes durable storage in Clojure.
https://github.com/threatgrid/asami#2021-04-0916:36vlaaadLong ago, the four nations lived together in harmony...#2021-04-0916:39quollI think it’s interesting how we have different use cases. For instance, I wouldn’t use Asami for high speed small transactions (especially on disk!) but it’s good for querying#2021-04-0916:40quollAlso, being schema-less can be far more convenient (e.g. you can just load arbitrary JSON into it, and it automatically turns it into a graph). But this has implications for upsert#2021-04-0916:53quollI just have to wonder… which project is the Fire Nation?#2021-04-0919:10danielcomptonVoting has started for Clojurists Together board members! If you’re a member, you should have a ballot by now. If you don't, get in touch! clojurists-together
https://www.clojuriststogether.org/news/announcing-board-nominations/#2021-04-0921:17Adam HelinsA peculiar hook for Shadow-CLJS: https://github.com/helins/coload.cljc
It formalizes the act of "coloading". When working with CLJC files, this hook ensures they are loaded both as Clojurescript in your JS engine and Clojure on the JVM.
Each such namespace exists in two universes, and both universes are kept in sync everytime something is changed.
Why? Well, I'll release a novel CSS library soon which leverages this heavily 🙂#2021-04-1010:43Adam HelinsAnd when I work with complex CLJC, I often have problems with macros. They often need to output different code depending on the compilation target (Clojure? Clojurescript? Dev, release?)
Reader conditionals cannot be applied to that problem, so here is my simple solution: https://github.com/helins/medium.cljc#2021-04-1011:14borkdudeNo mention of https://github.com/cgrand/macrovich in the README?#2021-04-1011:30Adam HelinsHmmm, not exactly the same goal but you are right, I'll add a small "prior work" section ;)#2021-04-1910:10Karol WójcikThat's awesome!#2021-04-1112:24pezHello Clojurains! Calva’s Getting Started with ClojureScript story just improved massively. With v2.0.187 this arrived: https://github.com/BetterThanTomorrow/calva/issues/1114, which makes the process to get an app with an editor connected ClojureScript REPL running a matter of:
1. Create the small directory structure that the ClojureScript Quick Start tells you to create
2. Jack-in
Boom!#2021-04-1112:27pezThis was entirely doable before, but it had the user to first create a custom ClojureScript REPL setting in VS Code, which is not all that straight forward for most people, and also an odd requirement for the most vanilla ClojureScript REPL. 😃#2021-04-1112:30pezHere’s the change log for the last couple of weeks for your convenience:
[2.0.187] - 2021-04-11
• https://github.com/BetterThanTomorrow/calva/issues/1114
• https://github.com/BetterThanTomorrow/calva/issues/1117
[2.0.186] - 2021-04-10
• https://github.com/BetterThanTomorrow/calva/issues/1023
• https://github.com/BetterThanTomorrow/calva/issues/1111
• https://github.com/BetterThanTomorrow/calva/issues/1112
• Fix: https://github.com/BetterThanTomorrow/calva/issues/1105
• https://github.com/BetterThanTomorrow/calva/issues/1067
• Bump `clojure-lsp` to https://github.com/clojure-lsp/clojure-lsp/releases/tag/2021.04.07-16.34.10
• Bump `cider-nrepl` to https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#02510-2021-04-08
[2.0.185] - 2021-04-05
• Fix: https://github.com/BetterThanTomorrow/calva/issues/1098
• Fix: https://github.com/BetterThanTomorrow/calva/issues/1079
• Add experimental setting to: https://github.com/BetterThanTomorrow/calva/issues/650
• Bump `clojure-lsp` to `2021.04.03-18.43.55`
[2.0.184] - 2021-04-02
• Fix: https://github.com/BetterThanTomorrow/calva/issues/1086
• Fix: https://github.com/BetterThanTomorrow/calva/issues/1060
• https://github.com/BetterThanTomorrow/calva/issues/1088 and bump to `2021.03.30-20.42.34`
• https://github.com/BetterThanTomorrow/calva/issues/1091
[2.0.183] - 2021-03-30
• https://github.com/BetterThanTomorrow/calva/issues/978
• Fix: https://github.com/BetterThanTomorrow/calva/issues/1083
[2.0.182] - 2021-03-26
• https://github.com/BetterThanTomorrow/calva/issues/1017
#2021-04-1217:56dangercoderAwesome!#2021-04-1113:23practicalli-johnpracticalli/clojure-deps-edn user wide configuration for Clojure CLI tools
Add aliases for more REPL options, with nREPL server for the built-in terminal UI and nREPL client connections with simple and Rebel enhanced terminal UI.
Separated REPL into REPL terminal UI, REPL with Editor and Remote REPL connection
New aliases:
• :repl/nrepl - Clojure REPL with nREPL server
• :repl/cider - Clojure REPL with nREPL server and Cider-nrepl (code completion, pretty print, etc.)
• :repl/cider-refactor - as above with clj-refactor
• :repl/remote - simple terminal UI nREPL client for a remote REPL
• :repl/rebel-remote - as above with Rebel Readline UI
https://github.com/practicalli/clojure-deps-edn/#2021-04-1116:39seancorfieldYou have :repl/cider in there twice?#2021-04-1117:22practicalli-johnOoops, so I did. Fixed it to cider-refactor. Thanks.#2021-04-1206:36slipsethttps://github.com/clj-commons/pomegranate v 1.2.1 is released.
This release contains a bump of the wagon libs from 3.3.2 -> 3.3.4#2021-04-1313:19ericdalloclojure-lsp Released new https://clojure-lsp.github.io/clojure-lsp/ version with support for 19 known snippets and custom user snippets during completion 🎉
For more information check #lsp#2021-04-1314:56Eric IhliJust released first/beta version of Tightly Packed Trie implementation as described in this paper: https://www.aclweb.org/anthology/W09-1505.pdf.
https://github.com/eihli/clj-tightly-packed-trie
https://clojars.org/com.owoga/tightly-packed-trie
It results in compression of ~95% for a trie implemented with a traditional Clojure data structure like a hash-map.
The entire tightly-packed data structure is a contiguous array of bytes as a java.nio.ByteBuffer. Address offsets in the ByteBuffer are stored as variable-length encoded integers, which saves a lot of space compared to typical 32 or 64 bit pointers.#2021-04-1315:08nilernNice! I have been thinking about something like this quite a few times lately but haven't actually needed to use one yet 😄#2021-04-1320:11Adam HelinsInteresting, and neat that you provide the paper. It always very instructive to take a "formal" description and compare it with an actual implementation.#2021-04-1320:12Adam HelinsPeople are often scared of papers just to realize that it is pretty straightforward in code.#2021-04-1321:17Eric IhliYeah some papers can be scary but this one was a great introduction. Straightforward, short, and no advanced math.#2021-04-1507:00djbluePortal, a data navigation / visualization / inspector tool for clojure, has a new release available 🎉. Version 0.11.0 sees a few usability improvements and some experimental changes like composing viewers via hiccup. For a full list of changes, you can visit the https://github.com/djblue/portal/releases/tag/0.11.0. You can also experiment with portal online https://djblue.github.io/portal/. Feedback welcome!#2021-04-1610:39LuMight be good to expand the snippets when clicking over the ... .. just a thought 🙂#2021-04-1619:37Alex Miller (Clojure team)org.clojure/data.json 2.2.0 is now available, changes since 2.1.0
• Add https://clojure.atlassian.net/browse/DJSON-41: New support for writing java.time.Instant and java.util.Date (+ subclasses)
◦ New options to write functions:
▪︎ :date-formatter - java.time.DateTimeFormatter to use (default DateTimeFormatter/ISO_INSTANT)
▪︎ :sql-date-converter - fn to convert java.sql.Date to java.time.Instant (default provided)
• Perf https://clojure.atlassian.net/browse/DJSON-36: Refactor code in read-array and read-object
• Fix https://clojure.atlassian.net/browse/DJSON-43: Fix buffer overflow in pushbackreader (fixed in 2.1.1)
All changes by @slipset - thanks for his efforts and for the bug/enhancement reports from others#2021-04-1714:56emil0rez-wire 0.5.0 is released. This release adds branching to forms
Repo: https://github.com/emil0r/ez-wire
Official documentation: https://emil0r.github.io/ez-wire-docs/#2021-04-1717:12ribeloa simple db that copies the functionality of datascript, using meander as a query tool
https://github.com/ribelo/doxa/#2021-04-1815:30Joshua SuskaloVersion 1.0.0 of farolero has just been released!
Farolero is a library for thread-safe Common Lisp style conditions and restarts, including debugger support and additional control flow operators.
Limited support is also provided for ClojureScript, with plans for full support once I can determine the cause of a few bugs (any ClojureScript experts who can help with that, PRs are appreciated).
Repo: https://github.com/IGJoshua/farolero
Documentation: https://cljdoc.org/d/org.suskalo/farolero/CURRENT#2021-04-1904:34Candidjoker v0.17.0 is released: https://github.com/candid82/joker/releases/tag/v0.17.0#2021-04-1908:38Karol WójcikProudly annoucing new version (0.1.18) of [holy-lambda](https://github.com/FieryCod/holy-lambda) a simple micro framework which turns your code into AWS Lambda functions for both JVM and native runtime.
Notable changes:
- Interceptors support https://github.com/FieryCod/holy-lambda/blob/master/examples/hello-lambda/src/hello_lambda/core.clj
- Fixes for a project template. You can now generate a project with lein new holy-lambda <name-of-the-project>
- Basic support for GraalVM EE (PGO optimizations in-process)
- Easier way of generating native configurations via (agent/in-context). Docs about native-configurations (in-progress)
- Unify responses. Response can be either null (for event ack) or a map of [:body, :isBase64Encoded :headers :multiValueHeaders] (breaking change)
- Rename gen-main to entrypoint. Move to fierycod.holy-lambda.native-runtime (breaking change)
- Use new group name for all artifacts (old one could not be verified :() io.github.FieryCod/holy-lambda
- Add some docs
EDIT: You can now also join a slack channel #holy-lambda 🙂#2021-04-1908:55Tomas BrejlaSince you added GraalVM EEsupport.. Are there any noticable differences between CE and EE-compiled versions? Different performance characteristics, utilization of resources,..?#2021-04-1909:36Karol WójcikI don't know yet. This or next month I will make some benchmarks for:
• holy-lambda-ce
• holy-lambda-ee
• holy-lambda-ee-with-pgo-optimizations
, compare them with other runtimes and write a summary in doc/ 🙂
My bet is that there will be some real differences for complex applications, but you have to wait a little bit for a proof 🙂#2021-04-1909:26slipsetPlease don’t use clojure.data.json 2.2.0 there is a serious data-loss bug in it. The offending commit has been reverted, but I’m waiting for a new release. I’m terribly sorry for this. Thanks to @thheller for reporting the bug.#2021-04-1911:06nilernIntroducing Eximia, the state of the art Clojure XML processor 😉 Roughly 4x faster than the usual options. Small codebase. With XML namespace support and secure defaults. https://github.com/nilern/Eximia#2021-04-1911:19borkdude@U4MB6UKDL Looks cool. In the README you refer to clojure.xml (Clojure 1.10.3), what is this?#2021-04-1911:20borkdudeIs that the built-in namespace? That's pretty much deprecated in favor of data.xml I think#2021-04-1911:28nilernYes and yes https://clojure.atlassian.net/browse/CLJ-2583#2021-04-1911:30nilernBut I doubt that that is common knowledge#2021-04-1911:31borkdudeI think not mentioning clojure.xml contributes to the process of deprecation. Many people probably don't know it even exists ;)#2021-04-1911:32borkdudeAny chance those speed-ups can end up in clojure.data.xml proper? @U04V5VAUN has been doing some nice work on clojure.data.json. Perhaps @U064X3EF3 is open to have someone contribute to clojure.data.xml in a similar fashion?#2021-04-1911:33borkdudeclojure.data.xml hasn't really seen a lot of work on it for a while, it would be nice to get someone who knows this stuff on it maybe#2021-04-1911:34nilernI thought maybe they would at least get a stable release out if I do this#2021-04-1911:37nilernThe laziness in data.xml does have substantial performance and complexity costs but I think there is some low-hanging fruit there nevertheless#2021-04-1913:11Alex Miller (Clojure team)Sure, happy to look at stuff like I've been doing with Erik in data.json. The important thing is to break it into manageable (smaller better) chunks, defined well with tickets, and build patches for each. I can then evaluate those on a regular basis (often on Fridays I have a little more time for things like this). I would want to communicate with Herwig on that stuff but I have not a lot of luck getting in touch with him recently.#2021-04-1913:17nilernOne specific thing I noticed is reusing XMLInput/OutputFactories. It's probably the reason Eximia is 15x faster than data.json on tiny inputs#2021-04-1913:17slipsetjson?#2021-04-1913:18nilernOops. s/json/xml/#2021-04-1918:42vemvGreat work 👏
Probably it would be a good idea to have some sort of roundtrip/equivalence test against clojure.data.xml#2021-04-1919:48nilernPerhaps. Although with namespaced XML they aren't going to be equivalent anyway.#2021-04-1913:29Alex Miller (Clojure team)org.clojure/data.json 2.2.1 is now available - addresses a serious bug in 2.2.0 (rolls back the change)#2021-04-1916:35katoxPGMig 0.7.0 is out. Check it out if you use .cljmigrations using SCI. The native image compiled binary should be now on par with uberjar but still much faster.
https://github.com/leafclick/pgmig/releases/tag/v0.7.0#2021-04-1923:38JeremyHi everyone. I’ve written a https://github.com/jdf-id-au/talkfor https://netty.io/ to try to make websockets easy to use from Clojure without bringing in lots of dependencies. Intro post on https://clojureverse.org/t/netty-http-websockets-wrapped-in-core-async-jdf-talk/7535.#2021-04-2010:51plexusWe've been putting out a number of succesive Glögi releases to accomodate breaking changes in the Google Closure Library. All users are encouraged to upgrade
[lambdaisland/glogi "1.0.106"]
{lambdaisland/glogi {:mvn/version "1.0.106"}}
Please report any remaining issues on Github. Discussion in #lambdaisland.
https://github.com/lambdaisland/glogi/#2021-04-2115:00Karol WójcikI'm thrilled to announce a new version of holy-lambda 0.1.21 which now supports #babashka runtime 🙂 Special thanks to @viesti and @borkdude! You're awesome guys!
You can now use one of the following runtimes:
- java
- babashka (here is a proof https://bdsa1uru44.execute-api.eu-central-1.amazonaws.com/Prod/)
- native
https://github.com/FieryCod/holy-lambda
For now, babashka is shipped in zip which is quite lame and makes the artifact super big (50mb).
I'm aware that's a lot, therefore I will provide a special AWS Layer for babashka in the future.
Please tag this announcement with babashka icon if you would like me to do it :)
If you would like to give babashka runtime a spin then use run the following:
lein new holy-lambda example
cd example
make USE_BB=true deploy-native # For babashka
make deploy-native # For native-runtime
make deploy # For java runtime
To remove stack just run:
make destroy-stack
PS: Template copies /usr/bin/bb to project path, for now, therefore you need babashka on /usr/bin/
If you have any question visit #holy-lambda channel 🙂#2021-04-2115:05Karol WójcikAlso adding support for babashka was very straightforward. If anybody is interested in reading the details, then here is a commit:
https://github.com/FieryCod/holy-lambda/commit/7716803810fbf919dcbc65828a37782a7c4175ac#2021-04-2216:18metasoarousCool beans! Is there anything preventing this from being used with the clojure CLI & deps.edn, or is lein required?#2021-04-2216:28Karol WójcikIt's not required 😄#2021-04-2218:56Jakub Holý (HolyJak)I believe somebody already made a layer with bb, though might not fit your needs.#2021-04-2219:55Karol WójcikHi @U0522TWDA! Yep I’m aware. I will base the layer on some of @U0FT43GKV work ;) #2021-04-2306:16Dainius JocasHi, nice work 👍 @UJ1339K2B if anything is needed just ping me#2021-04-2306:16Karol Wójcik@U0FT43GKV
1.Would love to know whether you pay anything for hosting the layer?
2. May I please tag you in the repo for the parts that were inspired by your work?#2021-04-2306:23Dainius Jocas1. The layer was uploaded using my personal AWS account but to have the layer uploaded I didn't have to pay. AFAIK, you pay just for the usage of lambdas that uses some layer, i.e. the regular AWS price.
2. Yes, that would be great. I'm curious to learn which parts of my little hack helped others @UJ1339K2B #2021-04-2306:24Karol Wójcik1. So each time somebody use my layer I pay for it?#2021-04-2306:30Dainius JocasNo. The lambda layer is like the library in clojars: you just upload it (free for you), and whoever use it in whatever way they do it, you have nothing to do with paying anything. Another way to think that a layer is just a zip in some public AWS S3 bucket, i.e. you pay nothing, and you aren't paid.#2021-04-2306:37Karol WójcikOk got it. That was exactly the part I was missing. Thank you so much.#2021-04-2209:06blueberryNew releases of ClojureCUDA, Neanderthal, and Deep Diamond, with CUDA 11.2 support.
http://clojurecl.uncomplicate.org,
http://neanderthal.uncomplicate.org, and
https://github.com/uncomplicate/deep-diamond#2021-04-2212:24bozhidarCIDER 1.1 is out! More details here https://github.com/clojure-emacs/cider/releases/tag/v1.1.0 Cheers! cider#2021-04-2213:08pez@U6BUSDFMX I deleted your sweet reply CIDER glass. It’s because the content at the root level of this channel needs to be announcements. There are bots and such publishing it around the interweb. Totally agree with the sentiment!#2021-04-2213:08pezcider#2021-04-2213:09cassielMy bad - no problem. I put it in the wrong place.#2021-04-2214:39tonywhen could we expect it in https://stable.melpa.org/#2021-04-2215:40bozhidarNo idea. I assume it will land there fairly soon, but I'm not familiar with the build schedule and I don't know how often the packages are rebuilt.#2021-04-2215:41bozhidarThere's also the chance that the extra tag I added to fix the docs version broke MELPA in some way. 😄#2021-04-2217:32Eric IhliFor anyone doing language-related work, I just released a library that converts text to phonetic sounds and does syllabification of those sounds.
https://github.com/eihli/phonetics
https://clojars.org/com.owoga/phonetics
(get-phones "alaska")
;; => [["AH0" "L" "AE1" "S" "K" "AH0"]]
(syllabify (first (get-phones "alaska")))
;; => [["AH0"] ["L" "AE1" "S"] ["K" "AH0"]]
(syllabify (first (get-phones "foobarbazia")))
;; => [["F" "UW1"] ["B" "AA1" "R"] ["B" "AA1"] ["Z" "IY0"] ["AH0"]]
(get-word ["AH" "L" "AE" "S" "K" "AH"])
;; => ["alaska"]
(get-word ["N" "IY" "S"])
;; => ["neice" "neece" "niece" "nice(1)" "kneece" "kniess" "neiss" "neace" "niess"]
It leans heavily on http://www.speech.cs.cmu.edu/cgi-bin/cmudict/.
This pairs well with https://github.com/eihli/clj-tightly-packed-trie for large data models to provide things like phonetic autocomplete or finding rhymes.#2021-04-2218:05pezVery cool! How does the approach compare to something like soundex?#2021-04-2218:12Eric IhliI wasn't familiar with Soundex. Looking at it now, it looks like Soundex is like a hash function that hashes words (specifically names - proper nouns) to a 4 character code. Robert and Rupert both map to "R163" in Soundex. But the phonetics are different. I'm guessing Soundex is used as a hashing function in database indexes? The phonemes this produces are for "human" consumption.#2021-04-2219:03dominicm> A future TODO and a request for contribution would be for a function that converts a made-up set of phonemes into a somewhat appropriate spelling of a word.
Haha, this was my immediate thought "Oh cool, a way to generate words" :P#2021-04-2219:22Eric IhliA quick search didn't reveal any existing implementations of the reverse of https://freetts.sourceforge.io/javadoc/com/sun/speech/freetts/lexicon/LetterToSoundImpl.html.#2021-04-2219:38Eric IhliLooks like this paper describes an implementation. https://www.cs.cmu.edu/~hovy/papers/07IJCAI-spelling-variants.pdf#2021-04-2219:48pez> I’m guessing Soundex is used as a hashing function in database indexes?
Yes, that’s how I remember it. Long time since i used it. Back in the mid 90's. I adapted it for Swedish names for a CRM I was working with.#2021-04-2222:39wilkerlucioPathom Viz 2021.04.22 is out! The changes:
- UI improvements on Request tab, now the recent items will be at the top. The max size for a request row can now fit 5 lines of query, and I add a border on the right side to make easier to scroll the whole list in the presence of many scrollable requests.
- Now when seeing node details in the graph, there is a button to show the whole graph data, this complements the data from individual nodes.
- Now when you log a graph you can click on nodes to see their details.
Another great news is that thanks to @ales.najmann now Pathom Viz also creates Windows builds! Now you can download Mac, Linux and Windows builds at the Pathom Viz releases, download 2021.04.22 at: https://github.com/wilkerlucio/pathom-viz/releases/tag/v2021.4.22#2021-04-2223:55littleliin addition pathom-viz is newly available via Scoop installer on Windows.
scoop install pathom-viz
#2021-04-2320:05Michaël SalihiHi everyone!
I’ve written https://github.com/prestancedesign/inertia-clojure a Ring middleware for https://inertiajs.com/, a new concept to build single-page apps without building an API.
This lets you build SPA with Reagent, React, Vue and Svelte using Clojure server side for the routing, controllers, etc.
If your interested, there is some examples in the lib repo:
https://github.com/prestancedesign/inertia-clojure
Cheers!#2021-04-2413:54Michaël SalihiWoohoo! My Clojure adapter is added to the Inertia website. 👍#2021-04-2515:11eccentric JI started embarking on a project creating a ring-like interface for express. It’s working but want to think some things through and write docs/tests before releasing. How true to ring’s API did you stay? Right now all my test handlers are manually extracting promise data that the request could be wrapped in and returning a promise with the result. I’m tempted to switch gears to something between ring and interceptor based since I can manage promises automatically between the handlers that way. Given that you made this I might go ahead and change my api so that it’s ring-ish but is async or sync without the user having to think or know about it.#2021-04-2720:08Michaël SalihiSound interesting. 👍
It kinds remind me Macchiato, do you know?
https://github.com/macchiato-framework/macchiato-core#2021-04-2804:28eccentric JI had no idea about that one. Thanks! It's definitely higher quality than what I have currently. Might expand on what I have to make it more ergonomic for cljs\js and see what comes of it. Will definitely have to start playing with your library and macchiato though 🙂#2021-04-2415:22mike_ananevHi! New library template is out. Key feature of this release that all tasks performed by babashka tasks
https://github.com/redstarssystems/rssyslib
This template will give you the following basic project workflow:
{:tag :a, :attrs {:href "/cdn-cgi/l/email-protection", :class "__cf_email__", :data-cfemail "94f9fdfff1d4f9f6e4a4a6"}, :content ("[email protected]")}
Changelog https://github.com/redstarssystems/rssyslib/blob/develop/CHANGELOG.adoc#2021-04-2417:13richiardiandreaI am really happy babashka is taking over - I had a very pleasant year when I was using lumo for scripting at work and I think that niche is now covered again - thanks @U04V15CAJ!#2021-04-2416:13nhaSmall announcement for https://github.com/turtlequeue/setup-babashka
This is a Github action that installs and caches babashka babashka#2021-04-2421:52Candidjoker v0.17.1 is released: https://github.com/candid82/joker/releases/tag/v0.17.1#2021-04-2610:07Dainius JocasA new release of the Lucene grep, that includes a flexible text analysis pipeline construction from most of what Lucene has to offer https://github.com/dainiusjocas/lucene-grep. Now things like this are possible now:
echo "<p>foo bars baz</p>" | \
./lmgrep \
--only-analyze \
--analysis='
{
"char-filters": [
{"name": "htmlStrip"},
{
"name": "patternReplace",
"args": {
"pattern": "foo",
"replacement": "bar"
}
}
],
"tokenizer": {"name": "standard"},
"token-filters": [
{"name": "englishMinimalStem"},
{"name": "uppercase"}
]
}
'
=>
["BAR","BAR","BAZ"]
#2021-04-2615:39Alex Miller (Clojure team)org.clojure/core.async 1.3.618 is now available
• https://clojure.atlassian.net/browse/ASYNC-237: (CLJS) timeout timers access array elements with out-of-bounds index#2021-04-2616:04jerger_at_ddaWe proudly announce the first working release of https://gitlab.com/domaindrivenarchitecture/k8s-mastodon-bot
We generate valid k8s-deployment-yamls for mastodon-bot. With deep (spec-)validation and in a multi-target setup (cljs, clj, graalvm-native).#2021-04-2617:44Alex Miller (Clojure team)org.clojure/data.json 2.2.2 is now available
• Perf https://clojure.atlassian.net/browse/DJSON-36: Reapplied updated refactored code in read-array and read-object
• Add https://clojure.atlassian.net/browse/DJSON-45: Generative tests for read/write roundtrip#2021-04-2716:01Noah Bogartwould it be helpful to run data.json over the JSON Test Suite (https://github.com/nst/JSONTestSuite)? if it would be, how best should I raise any issues that are found? JIRA?#2021-04-2716:25Alex Miller (Clojure team)Sure, would be best to integrate something like that into the repo so it can stay in sync (could be a script or whatever). If you’re interested in working on that, would be best for you to become a contributor and get jira access#2021-04-2716:37Noah BogartCool, I’ll see if I can get something working and if so, I’ll sign the CLA#2021-04-2904:35Noah BogartI have signed the CLA and submitted a JIRA support ticket for access.#2021-04-2619:46Alex Miller (Clojure team)com.cognitect/transit-js 0.8.874 is now available
• goog.isArray & goog.isString removed, switch to goog.typeOf#2021-04-2619:48Alex Miller (Clojure team)com.cognitect/transit-cljs 0.8.269 is now available
• Update transit-js dependency to 0.8.874#2021-04-2710:37borkdudeNew release of edamame, a highly configurable clojure / EDN parser with accurate location metadata.
Release notes: https://github.com/borkdude/edamame/blob/master/CHANGELOG.md#0011#2021-04-2710:40borkdudeAlso a new release of sci, a configurable Clojure interpreter suitable for scripting and Clojure DSLs which is compatible with JVM / GraalVM native and ClojureScript (advanced).
https://github.com/borkdude/sci/blob/master/CHANGELOG.md#v025#2021-04-2715:06Jakub Holý (HolyJak)Have you / will you make a tool called fi? Would be a nice companion to ☝️ :)#2021-04-2715:07borkdude:)#2021-04-2715:58chrisnI posted a https://github.com/cnuernber/cljs-lambda-gateway-example of using AWS API Gateway proxying to AWS lambda to host a full reagent-based webapp running in graal native. This required a bit of a bridge between API Gateway and a ring handler stack; this bridge I think would be best done by the community. In any case, Enjoy 🙂.#2021-04-2716:10Karol Wójcik@UDRJMEFSN There is already such bridge which supports native, babashka and java runtime 😄 (Disclaimer: It's done by me)#2021-04-2716:17chrisnI know, you are speaking of https://github.com/FieryCod/holy-lambda which I think is a good pathway but for my tastes it is not a good demonstration of the basic pathway end to end as it hides a lot of details. I can link to it in the addendum section however if people want to explore a more batteries-included pathway. There is more here than just proxy-lambda integration as it this is also demonstration of how to use shadow-cljs which I see lots of questions about and a basic demonstration with instructions of how to setup API Gateway to forward such requests. The differentiator is this is project designed for teaching, not designed as a library for further use 🙂.#2021-04-2716:22Karol WójcikSure! Thanks for your explanation! I do appreciate it a lot!#2021-04-2720:56ericdalloclojure-lsp Released clojure-lsp https://github.com/clojure-lsp/clojure-lsp/releases/tag/2021.04.27-20.17.45
With the power of clj-kondo, adds the feature of finding the definition of re-frame.core registrations like reg-event-db , reg-sub and others! No more searching by text in the whole project with that 🎉
For more details, check #lsp#2021-04-2721:16Michaël SalihiA few days ago, I released https://github.com/prestancedesign/inertia-clojure Ring middleware.
Here is a more complete demo of how I started from @seancorfield 's usermanager fork to turn it into a SPA.
More info here: https://github.com/prestancedesign/usermanager-reagent-inertia-example
Feedbacks are welcome.
Cheers!#2021-04-2722:03mauricio.szaboJust published a new version of Chlorine, the socket-repl package for the Atom editor. In this version, some fixes, a new goto var definition for namespaces, and also the ability to extend core commands using Pathom. The feature is not yet 100% documented, but I'm doing small spikes of documentation here: https://github.com/mauricioszabo/repl-tooling/blob/master/doc/extending.md#Add-new-commands.
Also, I'd like to thank @wilkerlucio for all the help, encouragement, and also for doing an incredible job with Pathom. You're the man 👍#2021-05-0114:06ribeloany finitely complicated problem can be made infinitely complicated by a finite number of macros, so why not write macros that write (macro based)meander code that would generate transducers functions?
https://github.com/ribelo/danzig#2021-05-0210:57ribelofrom today doxa can be even faster than datascript
https://github.com/ribelo/doxa#can-we-be-faster-than-datascript-yes#2021-05-0212:56Vincent CantinYou posted a link to the same library 2 weeks ago. https://clojurians.slack.com/archives/C06MAR553/p1618679544447900#2021-05-0213:07ribelosry, is there any place for new releases?#2021-05-0213:33steffan#releases#2021-05-0214:18yuhanIs this a library meant for public consumption or more like a series of explorations? I found the API quite hard to understand from the Readme, and none of the public functions have docstrings - just some feedback 🙂#2021-05-0214:21yuhanThe source definitely reads more like an exploratory notebook and it seems that the dependencies on encore, timbre, shadow-cljs are only used in comment forms and should be put into some sort of :dev alias.#2021-05-0214:41ribelo@UCPS050BV doxa was born by accident while testing what a meander can do#2021-05-0214:41ribeloI did not expect any interest, so for a long time there were neither tests nor readme#2021-05-0214:42ribeloI will probably write docstrings once I have worked out more or less in my head how it should look and be used.#2021-05-0214:48yuhanI feel like the commit function would look better taking variable arity of transactions, except there's an optional tx-meta argument which I couldn't figure out what it was for#2021-05-0214:51ribelotx-meta is written to the db metadata#2021-05-0214:52ribeloyou can only listen! for a specific tx-meta#2021-05-0215:02ribelo(def conn_ (atom (dx/create-dx)))
(listen! @conn_
(fn [db]
(let [tx-meta ((meta db) :tx-meta)]
(cond
(#{:one :two} tx-meta)
(println :something)
(#{:three} tx-meta)
(println :something-else)))))
(dx/commit! conn_ [:dx/put {:db/id 0 :key :value}] :one)
(dx/commit! conn_ [:dx/put {:db/id 1 :key :value}] :two)
(dx/commit! conn_ [:dx/put {:db/id 2 :key :value}] :three)
;; => repl
;; :something
;; :something
;; :something-else
#2021-05-0304:24steveb8nI like this lib and will definitely use it if it reaches prod quality. thanks for making it#2021-05-0321:10wotbrewI am a little sceptical that a hash index {eid {k v}} could possibly beat indexed datascript in the general case? e.g not trivially small databases, and not 'get large portion of all the rows' type queries. @U0BBFDED7 any magic I am missing? Aren't value queries going to have to scan the the whole 'table'?#2021-05-0321:14ribelonested map can be faster due to the possibility of limiting the iterated elements, @U0GE2S1NH#2021-05-0321:15ribelo[(datascript-query) (dx-query) (fast-dx-query)]
;; clj => [182.98 685.15 71.05] - in ms
for a normal query doxa is ~5x slower#2021-05-0321:19ribeloBy the way, initially the goal was not to race with datascript at all, rather easy interop with re-frame and seamless data synchronisation with firestore#2021-05-0322:03steveb8nusing the re-frame app-db is why I like this lib. using datalog instead of specter for subs is a nice architecture. it does mean losing some perf because equals? can’t use identical? but that’s ok for 80% of my use cases#2021-05-0923:55steveb8n@U0BBFDED7 do you want issues logged yet? I have a couple of feature requests: 1. runtime query & 2. query/pull without ?table. just checking when you think bugs/feature requests are useful#2021-05-1008:26ribeloYes, please. Especially the feature request.#2021-05-1008:34steveb8ngreat. thanks#2021-05-1009:31ribeloDo grapql entities always start with two underscores?#2021-05-2109:18steveb8nonly the :typename field. the only other standard field is :id#2021-05-2109:20steveb8nyou can see it here https://countries.trevorblades.com/#2021-05-2109:20steveb8npaste this query in the left panel and run it….#2021-05-2109:20steveb8nquery {
countries {
typename
code, name, currency
}
}#2021-05-2109:22steveb8nalthough that api does not provide an :id so maybe not a perfect example#2021-05-2109:55steveb8nI'm away from my desk at the moment but I saw your comment. Thanks#2021-05-2109:57steveb8n1 question. Could a runtime arg be passed using the :in clause? That way it would match the behaviour of the other implementations#2021-05-2120:14ribeloI have just fixed it#2021-05-0411:25mike_ananevNew release of application template https://github.com/redstarssystems/rssysapp
Now all functionality of `just`, `direnv` utilities performed by `babashka` v0.3.7+
This template will give you the following basic project workflow:
{:tag :a, :attrs {:href "/cdn-cgi/l/email-protection", :class "__cf_email__", :data-cfemail "3f5256545a7f525d4f0f0d"}, :content ("[email protected]")}#2021-05-0513:32bozhidarclojure-mode 5.13 is out! The release features a few small improvements https://github.com/clojure-emacs/clojure-mode/releases/tag/5.13.0#2021-05-0515:00peztoggle-ignore, hmm… Someone asked for a command helping with ignores quickly in Calva, but we agreed that typing alt+left, #_ was quick enough (the first keypress there moves the cursor to the start of the form). But now, looking at the changelog for this update… I see a toggle-ignore-surrounding-form and it starts to make more sense.#2021-05-0514:01Karol WójcikAnnouncing clojure-graalvm-agent-helper to ease native configuration generation for native-image tool.
https://github.com/FieryCod/clojure-graalvm-agent-helper#2021-05-0520:15seancorfieldcom.github.seancorfield/next.jdbc {:mvn/version "1.2.659"} — The next generation of clojure.java.jdbc: a new low-level Clojure wrapper for JDBC-based access to databases. — The main difference from 1.1.646 (and the reason for 1.2.x) is that clj-commons/camel-snake-kebab is now an unconditional dependency, rather than a conditional one, which improves GraalVM-native compatibility and removes some potential edge cases when trying to use the library in certain multi-artifact projects. https://cljdoc.org/d/com.github.seancorfield/next.jdbc/1.2.659/doc/getting-started Follow up in #sql Thanks to @snorremd for additional PostgreSQL-related docs and @delaguardo for help getting GraalVM testing up and running!#2021-05-0522:52borkdudeIt is possible to make dependencies conditional and make them compatible with GraalVM native-image. I would say this could even improve native-image compatibility by leaving out deps that don't play well with it (and reduce binary size) but do it the right way: only resolve at compile time (top level) and not at runtime (function body).
https://github.com/yogthos/Selmer/blob/master/src/selmer/tags.clj#L392-L403#2021-05-0522:58borkdudeBut it seems you were already doing this correctly, so I don't understand why this change makes it better for GraalVM. Anyway, it's great that you are considering support for it :thumbsup:#2021-05-0600:02seancorfieldI was running into problems with it in our multi-artifact monorepo at times and I just sort of got tired of working around it. I also wasn’t 100% sure I was doing it correctly, conditionally, for use with GraalVM-native so I figured I should just remove the “at times”/uncertainty and be done with it. Lots of next.jdbc users seem to want the snake/kebab conversions anyway (and it’s not like next.jdbc doesn’t already depend on other libs — I’m a bit surprised the java.data dependency/code doesn’t cause GraalVM-native issues…?).#2021-05-0619:30borkdudeNew Selmer release! 🎉. Selmer is a powerful templating engine for Clojure and is now written in 100% pure Clojure with no external dependencies.
https://github.com/yogthos/Selmer
1.12.38 - made JSON dependency pluggable, remove hard dependency on cheshire
1.12.36 - improved default pretty printing of the context map using debug tag
- allow whitespace in filter: {{ foo | default:bar }}
1.12.35 - made json-html dependency optional, removed commons-codec dependency
Thanks @yogthos for the awesome library and being open to receive these enhancements.
Selmer (1.12.35) is now part of #babashka (version 0.3.8, bb will bump to Selmer 1.12.38 soon).#2021-05-0707:02roklenarcicMain thing missing from Selmer compared to python’s Jinja 2 (which has similar syntax) is whitespace control. If you put tags like {% if %} on their own line, you’ll get an empty line in the output. and you cannot say {%- if -%} . It makes writing some whitespace sensitive markup like YAML really hard. You basically need to keep the if, else, endif to the same line which can be a real mess.#2021-05-0707:03borkdudeMaybe you can post an issue about this?#2021-05-0707:05roklenarcichttps://github.com/yogthos/Selmer/issues/115#2021-05-0707:05roklenarcic5 years old 🙂#2021-05-0707:07borkdude@yogthos ?#2021-05-0707:09borkdudeAh it seems he’s open to the contribution so what are people waiting for :)#2021-05-0707:10roklenarcicHehe, I think the change is pretty large, as it fundamentally changes the processing, because you might have to remove content before the tag based on the tag itself#2021-05-0707:11borkdudeHas anyone tried?#2021-05-0707:12roklenarcicHaven’t seen it 🙂#2021-05-0707:12roklenarcicOn the second thought, it doesn’t change the render, it changes the template parse, as you can already cut the appropriate whitespace when you parse the template#2021-05-0707:14borkdudeI made a change to allowing whitespace in filters yesterday. It was doable. Don’t know about this change, but seems like a nice challenge#2021-05-0709:33Karol WójcikThank you so much @U04V15CAJ! Great release!#2021-05-0712:58yogthosand yeah white space control is a bit of a rabbit hole, the trickiest part is that you have to be able to look ahead to the end of the line to see if it's just space, and the reader doesn't support unbounded look ahead#2021-05-0712:58yogthosso you'd have to make a version of a reader that's able to scan to see if the next non space character is a new line#2021-05-0713:03borkdude@yogthos isn't this just about ignoring all whitespace between tags? I think this can be done using a flag? when you encounter the "signal" to ignore whitepace, you set the flag, then the reader ignores all blank TextNodes, until it finds the next "signal" to ignore whitespace?#2021-05-0713:04yogthosoh I guess there are a few different cases here, one I was thinking of is if you have a tag on an empty line, and you want to remove that line after#2021-05-0713:06yogthosspace inside the tag is easier to control#2021-05-0713:10borkdudeyou mean it like this right?
{% if foo} <inside tag> \n\n {{dude}} <inside tag> \n\n{% endif}#2021-05-0713:10borkdudefrom the issue I was interpreting it like that: people would like to spread the expression over multiple lines, while not rendering multiple lines#2021-05-0713:10borkdudebut it would be good to double check#2021-05-0714:30yogthosoh I guess yeah that could be another use case 🙂#2021-05-1018:32roklenarcicThere’s basically 2 cases:
{% tag -%} is easy you basically start droping whitespace after the tag until you find something that is not a tag#2021-05-1018:33roklenarcicThe other case is {%- tag %} which you can solve if you maintain the index of the last non-whitespace character you’ve encountered, then when you hit a tag like that you can simply set the length on the StringBuilder back to that index before you proceed with .setLength#2021-05-1018:34borkdudeah is that how it works#2021-05-1018:34borkdude@U66G3SGP5 I have a branch which is very close to this, I think#2021-05-1018:35roklenarcicThat;s how I would approach it at least#2021-05-1018:35borkdudebut I discussed this syntax with yogthos and it didn't feel compose-able to me. we bounced around some ideas and came up with e.g.
{% tag(trim) %}, a bit like [:tag {:trim true} ...] in hiccup#2021-05-1018:36borkdudebut I guess we can meet people where they are coming from jinja etc#2021-05-1018:37borkdude@U66G3SGP5 Feel free to try out this branch: https://github.com/borkdude/Selmer/tree/whitespace-control#2021-05-1018:38roklenarcicYou should think carefully if your variant enables everything that you get when you have 3 different variants available:
{%- tag %} , {% tag -%} and {%- tag -%}
I assume your solution is only 1 of these 3#2021-05-1018:40borkdudeI was mostly working on this from the angle of "is it possible", I wasn't actually interested in any specific solution#2021-05-0705:08Alex Miller (Clojure team)org.clojure/data.json 2.2.3 is now available
• Fix https://clojure.atlassian.net/browse/DJSON-47: Make number parsing match spec (reject invalid numbers) - thanks to @nbtheduke!#2021-05-0705:29seancorfieldcom.github.seancorfield/honeysql {:mvn/version "2.0.0-rc1"} — SQL as Clojure data structures. Build queries programmatically -- even at runtime -- without having to bash strings together. — This is the first Release Candidate for the 2.0 version, which has been in development for about seven months and has been tested by various people for a few months now (in production). This contains two small bug fixes and one new formatting option, compared to Beta 2. https://cljdoc.org/d/com.github.seancorfield/honeysql/2.0.0-rc1/doc/getting-started Follow up in #honeysql Thanks to @snorremd and @dharrigan in particular for diligent testing and finding bugs!#2021-05-0718:28Michael GardnerWow, I didn't realize there was a HoneySQL 2.0 in the works. It looks great! After reading "Differences Between 1.x and 2.x", I have a couple questions:
* Is setting :quoted the only way to toggle snake_case conversion? That feels like a complection that will come back to bite us later.
* It's a little silly, but I have a personal vendetta against the words "helper" and "util" in namespaces due to their vagueness. Did you consider honey.sql.builders or just honey.sql.build?#2021-05-0718:36seancorfield@U01R1SXCAUX HoneySQL has had a helpers namespace for many, many years — V2 simply matches V1 on that (although it’s honey.sql.helpers vs honeysql.helpers).#2021-05-0718:37seancorfieldI’m not sure what you mean about :quoted toggling snake_case?#2021-05-0718:52Michael GardnerI know v1 had a helpers ns, I just wanted to bring it up since this is the only chance to choose something different. Anyway it's just my own sense of aesthetics, so I'm not going to try to push on that#2021-05-0718:53Michael Gardneron the other point, perhaps I misunderstood this line from the v1->v2 guide:
:allow-dashed-names? -- if you provide dashed-names in 2.x, they will be left as-is if quoting is enabled, else they will be converted to snake_case (so you will either get "dashed-names" with quoting or dashed_names without).
#2021-05-0718:57seancorfieldDuring the alpha releases, the namespace could have been changed. Once it hit beta, only accretive/fixative changes were being made. So that ship sailed over a month ago.#2021-05-0719:01Michael Gardnerfair enough#2021-05-0719:03seancorfieldI guess you’re not in the #honeysql channel? This stuff has been discussed there over the past few months as folks have been testing the alpha and beta releases.#2021-05-0719:04Michael Gardnerno, I'm not— sadly we're not using HoneySQL at my current shop so I hadn't been following it. Thanks for the pointer; I'll go look at the archives#2021-05-0719:05seancorfieldNo one has raised any concerns about the dashed names issue so far — beyond V1 being far too complicated in that area 🙂#2021-05-1017:36Vladislavnew syntax for :array :cast :inline etc is wow as useful!#2021-05-0720:47rschmuklerJust cut the first snapshot of com.teknql/shadow-cljs-tailwind-jit - introduces management of Tailwind's stylesheet JIT watch / release process into shadow as build hooks. Helps you to avoid having to pollute your repo with a postcss.config.js and tailwind.config.js boilerplate (still relies on you having a package.json, but that seems fair enough in most cljs projects). Early early release but if anyone wants to give it a spin: https://github.com/teknql/shadow-cljs-tailwind-jit#2021-05-0720:49p-himikWhat are the main differences from https://github.com/jacekschae/shadow-cljs-tailwindcss?#2021-05-0720:51p-himikAh, you're using hooks whereas that project uses npm run.#2021-05-0720:54rschmuklergreat question! That repo is an example of running tailwindcss-jit alongside shadow. It works by using npm run dev to start both the shadow process and the tailwind process. Your project is expected to have the required config files (ie. tailwind.config.js, postcss.config.js , and a boilerplate src/css/tailwind.css). My project generates those files for you based off of config in your EDN (ie. you can have a :tailwind/config {...} in your shadow file, and then shadow's build hooks take care of maintaining a side-car process that manages a temp directory with the required boilerplate that then outputs to your project directory. The end result is that it feels less like a node project and more like a shadow project. It also has the benefit that most editors know how to cider-jack-in (or their equivalent) to a shadow project, while starting a project via NPM would require additional config#2021-05-0721:00p-himikThanks for the detailed answer!#2021-05-0722:37Alex Miller (Clojure team)io.github.cognitect-labs/test-runner v0.2.0 is now available (as a git dep)
• Fix #12 - fix reflection warning
• Fix #17 - mix of -n and -r should work
• Add #26 - use exit code 1 when args are invalid
• Add #17 - skip fixtures if no vars from test ns are being run
• Add #28 - add entry point for -X style invocation
• Bump deps to latest + clojure 1.9.0#2021-05-0722:43Alex Miller (Clojure team)there are a few more outstanding issues/prs on the repo, I'll get to those the next time I take a pass here. let me know if I broke anything. I gave this release a tag and will continue to do that in the future so there is some sort of human version beyond the sha.#2021-05-0723:53richiardiandreaThis is a great tool, thanks for refreshing it!#2021-05-0807:47vlaaadA bit off-topic, but shouldn't https://cognitect-labs.github.io have some info about test-runner?#2021-05-0809:40borkdudeMaybe it should just be promoted as the official test runner on http://clojure.org?#2021-05-0809:41borkdudeOr somewhere in the deps / CLI guide#2021-05-0814:02Alex Miller (Clojure team)It’s not an “official” test runner#2021-05-0814:03borkdudeBut it could be promoted to be one#2021-05-0814:03Alex Miller (Clojure team)@U47G49KHQ it should! I didn’t realize that page existed#2021-05-0917:56Alex Miller (Clojure team)@U47G49KHQ added (and a lot of other cognitect-labs projects). turns out I created that page, but have no memory of doing so. :)#2021-05-1009:02nilernI don't think an official test runner even makes sense if it is just another dependency anyway.#2021-05-1009:06borkdude@U4MB6UKDL Don't you think mentioning this as a "go to" solution for deps.edn-based projects in the Deps and CLI guide would be useful?#2021-05-1011:02Alex Miller (Clojure team)I do, I actually thought it was in there#2021-05-1023:28seancorfieldIt’s mentioned on the t.d.a wiki https://github.com/clojure/tools.deps.alpha/wiki/Tools but I don’t see it mentioned anywhere on http://clojure.org#2021-05-0816:51borkdudeA new babashka release: 0.4.0:
Notable additions since 0.3.0:
- Support bb.edn configuration file with :paths and :deps (for including libraries managed by deps.clj and tools.deps.alpha)
- Add task runner (configured in bb.edn). See docs: https://book.babashka.org/#tasks
- Add Selmer and rewrite-clj to built-in libraries
- Add compatibility with the https://github.com/helins/binf.cljc and https://github.com/rm-hull/jasentaa libraries
- Support keyword arg parsing/passing from Clojure 1.11.0-alpha1
- All new website: https://babashka.org
https://github.com/babashka/babashka/blob/master/CHANGELOG.md#040
Many thanks to the folks who helped designing the new tasks feature, a lot of discussions went on in #babashka and Github discussions to flesh out the details.#2021-05-1112:38Ertugrul CetinHi all!
I’ve created a new debugging tool for re-frame 🎉. re-frame-flow is a graph-based visualization tool for re-frame event chains.
Let’s assume we clicked a login button and triggered a series of events. `login-fx -> http-fx -> some-fx -> some-db-handler ...` (event after event), so a path gets generated, re-frame-flow visualizes all paths in a graph.
https://github.com/ertugrulcetin/re-frame-flow#2021-05-1202:22eggsyntaxVery cool. Thanks! 👏#2021-05-1121:32uochanJust released antq ver 0.14.0, Tool to point out your outdated dependencies.
https://github.com/liquidz/antq
Now you can exclude specific versions as follows: --exclude=foo/#2021-05-1201:37wilkerlucioPathom Viz 2021.05.11 is out!
This release comes with many fixes and small improvements:
- Fix trace bug when all children disappear when the root children has over 20 items
- Ensure consistent background on CM6
- Show node details on snapshots
- Improve performance of snapshots rendering by lazy processing the elements
- Fix bug when sorting maps with irregular values
- Fix bug on trace that made tooltip stay on screen
- Remove node zoom on click on the graph view
- Use Tailwind JIT in the app
- Fix trace exceptions when trace is blank
- Error boundaries around each connection and log entries
You can download it at: https://github.com/wilkerlucio/pathom-viz/releases/tag/v2021.5.11#2021-05-1219:03Alex Miller (Clojure team)New release of Clojure CLI https://clojure.org/releases/tools#v1.10.3.833, just some relatively minor changes:
• https://clojure.atlassian.net/browse/TDEPS-177 - Fix Maven mirrors to look up by id, not name
• Remove flag when fetching git deps so that older git versions work
• Tweak some warning messages
• Clean up scripts to simplify variable replacement
#2021-05-1219:29Michaël SalihiFYI, after install this last version I had this error on Linux:
rlwrap: error: Cannot execute /usr/local/lib/clojure/bin/clojure: No such file or directory
Look like missing the binary, I start debugging#2021-05-1219:30Alex Miller (Clojure team)was that running clj or clojure?#2021-05-1219:30Alex Miller (Clojure team)if the former, does the latter work?#2021-05-1219:31Michaël SalihiYes, the latter works#2021-05-1219:32Alex Miller (Clojure team)ok, I think I broke the clj script then#2021-05-1219:33Alex Miller (Clojure team)for linux#2021-05-1220:11Alex Miller (Clojure team)use 1.10.3.839 please! sorry about that#2021-05-1220:18Michaël SalihiPerfect, thanks!#2021-05-1220:08Alex Miller (Clojure team)whoopsie! that had breakage for linux users, Clojure CLI 1.10.3.839 is now available, apologies...#2021-05-1319:05Michaël SalihiJust released Inertia-clojure ver 0.2.1, Clojure middleware for Inertia.js to build single-page apps, without building an API.
https://github.com/prestancedesign/inertia-clojure
• This version supports History.pushState (query-string appended to URI), so the app state is loaded/restored even after direct access to a URL
• Props are now optional via multi-arity render function.
• Some demo examples updated#2021-05-1411:03tatutlooks like an interesting approach to SPAs, nice to have a clojure backend library for it#2021-05-1411:11Michaël SalihiThanks you. I like your approach with Ripley too. Brilliant!#2021-05-1412:09tatutthanks… as usual there’s trade offs to everything… the inertia seems interesting to me as it looks like it would help with the bad parts of SPA (routing and managing data fetched thru APIs)#2021-05-1412:10tatutbut inertia still allows you to leverage the huge ecosystem of React components#2021-05-1412:11tatutripley frees you from having to work with the JS ecosystem, but down side is that you’ll be writing a lot of basic components yourself#2021-05-1412:33Michaël SalihiTotally agree.
> but inertia still allows you to leverage the huge ecosystem of React components
With Inertia, React /Vue / Svelte can be now considered as advanced "template" language.
For more oriented back-end profile like I am, it's very likable to manage auth, router, etc on the back.
And the icing on the cake, Inertia is working on Server-side rendering.#2021-05-2523:18Michaël SalihiFYI I released a complete new web app example https://github.com/prestancedesign/clojure-inertia-pingcrm-demo#2021-05-1414:53wilkerlucioNew release for ! https://github.com/wilkerlucio/pathom-viz/releases/tag/v2021.5.13
- Now app is signed and notarized on MacOS, no need to go around gatekeeper anymore!
- Pathom Viz will now auto-update
- Double click on Graph View will fit the nodes, easy way to recover in case the pan/zoom gets lost#2021-05-1415:11Alex Miller (Clojure team)org.clojure/data.json 2.3.0 is now available
• Fix https://clojure.atlassian.net/browse/DJSON-48: Make array parsing match spec - thanks @nbtheduke!
• Fix https://clojure.atlassian.net/browse/DJSON-18: Make pprint-json much faster - thanks Nikita Prokopov for the idea+tests and @slipset for adapation into current#2021-05-1421:34Joshua SuskaloAnnouncing americano, for when you want to water down your Clojure with a little bit of Java. It provides a way to compile Java code from the Clojure CLI without code!
The 1.0.0 release was just put out on Clojars.
https://github.com/IGJoshua/americano#2021-05-1421:39seancorfieldThat looks really nice @U5NCUG8NR!#2021-05-1421:41Joshua SuskaloThanks! I was looking for something that could replace Badigeon or a bespoke thing in my Conditions library, and I noticed nothing else supports Java compilation by configuration, so I figured I should write it! At the moment the only thing it's lacking as far as I can tell is proper annotation support.#2021-05-1422:15ericdalloAwesome! I was thinking in creating something like that last time I had that issue, well done!#2021-05-1422:18ericdalloI'll certainly use it on clojure-lsp!#2021-05-1500:51Joshua SuskaloAwesome! I'm excited to see the results there!#2021-05-1508:20raspasovThe name rocks! 😆#2021-05-1513:32Joshua SuskaloThanks @U050KSS8M!#2021-05-1515:18ericdallolocal, It works great @U5NCUG8NR!
But the CI failed, maybe related with support for java8?
https://github.com/clojure-lsp/clojure-lsp/runs/2590918728#2021-05-1515:26ericdalloI opened this issue: https://github.com/IGJoshua/americano/issues/1#2021-05-1516:03Joshua SuskaloI've published 1.0.1 that includes a hotfix for this issue!#2021-05-1508:13raspasovSince this question comes up pretty often, I made cljs-101:#2021-05-1509:17yuhanThat's really convenient! Is the user intended to clone the repo supposed or simply copy the clj shell invocation?
If it's the former, why not include an alias in a deps.edn and simply call clj -M:node#2021-05-1510:03raspasovYou can have the deps.edn also 🙂 I just wanted “the least number of files”. I wanted to demystify the starting of a REPL. If you put it behind an alias, you then need to teach people what an alias is in the context of deps.edn 🙂 Which can be useful but is not critical to get going.#2021-05-1510:07raspasovNot really clone, there’s literally nothing to clone! 🙂 It’s just one line command.#2021-05-1510:19yuhanYup, that's what I gathered, but the Readme and example code made it seem like it should be invoked from the project folder#2021-05-1510:24yuhanI also didn't realise the CLI tool implicitly adds "src/" to the classpath from wherever it was invoked, even when there's no deps.edn file - just small things that may be confusing to beginners#2021-05-1511:00borkdudeI've been doing it like clj -Sdeps '{:deps {org.clojure/clojurescript {:mvn/version "1.10.597"}}}' -M -m cljs.main -re node since a few years#2021-05-1518:20henryw374I suppose this says something about the sorry state of http://clojurescript.org#2021-05-1521:35seancorfield@UCPS050BV The CLI itself can tell you that:
{:tag :a, :attrs {:href "/cdn-cgi/l/email-protection", :class "__cf_email__", :data-cfemail "116274707f72515554425a455e413c22215852502627"}, :content ("[email protected]")}
No deps.edn file there, but src is on the path.#2021-05-1508:13raspasovhttps://github.com/raspasov/cljs-101#2021-05-1513:41littleliI reported the first... not a bug, rather a report.#2021-05-1513:52raspasovHa! 🙂 Thanks. Sorry, I haven’t seen a Windows for years. So it works… after you run it twice?#2021-05-1514:43littleliNo 🙂 there is a problem with escaping. Check the backslash \ before double quote "#2021-05-1514:44littleliEscaping work differently under Windows unfortunately. So the command has to look a bit different which I wanted to demonstrate in the issue description.#2021-05-1515:15raspasovAha! Got it. Merged 👍#2021-05-1515:15raspasovThank you!#2021-05-1515:35littleliSure thing. Great small project!#2021-05-1618:42hlshipio.aviso/pretty 1.0 is now available
Pretty is a library for printing things prettily in Clojure; primarily, formatting exceptions for quick and easy comprehension.
GitHub: https://github.com/AvisoNovate/pretty
Documentation: https://ioavisopretty.readthedocs.io/en/v1.0/
Pretty hasn’t changed much in the last couple of years, but with over 6 million downloads, it is quite widely used.
The 1.0 release ties up a couple of loose ends; by setting a 1.0 release, we would hope that other tools that make use of older versions of Pretty will upgrade to this stable release.#2021-05-1702:38hlshipio.aviso/pretty 1.1 is now available
Restored compatibility with Clojure 1.7.0.#2021-05-1809:01Ertugrul Cetinhttps://github.com/ertugrulcetin/re-frame-flow 0.1.4 is now available. (Graph-based visualization tool for Re-frame event chains)
• Changed
◦ Show nested routes on hover node
◦ Edge type changed to default one (Bezier curve)
◦ No need to declare `(re-flow/clear-cache!)`, it's automatically called on `:dev/after-load`
• Added
◦ dispatch and `dispatch-sync` trace support
• Fixed
◦ Tolerate `nil` inside `dispatch-n` #2021-05-1815:03Joshua Suskalohttps://github.com/IGJoshua/farolero version 1.1.0 is now available, including a full test suite and support for CLJS, and a way to specify how warnings are displayed#2021-05-1815:25borkdudeFriendly periodic reminder that there is also a #releases channel for minor updates#2021-05-1820:14dominicmWhilst disproportionate remember:
• #announcements is default, and many of those 14500 aren't active. You're not actually "reaching" 14500 people
• The audience for #releases is smaller, that's why it's separate.#2021-05-1820:59Michaël SalihiThanks you for the clarification.
I am withdrawing my message, it also appears in the main thread and it's irrelevant.#2021-05-1816:13Jacob O'BryantJust finished a major update for Biff, a batteries-included web framework (https://biff.findka.com, repo: https://github.com/jacobobryant/biff). It ended up being almost a complete rewrite. It's much simpler, easier, and more production-ready now. More details on the reddit post: https://www.reddit.com/r/Clojure/comments/nfemnf/just_finished_a_biff_rewrite_batteriesincluded/#2021-05-1918:32Alex Miller (Clojure team)org.clojure/data.json 2.3.1 is now available
* Fix [DJSON-51]: Fix possible read of x00's in quoted strings on partial buffer read#2021-05-2015:58blueberryDeep Diamond 0.20.3 released. The Clojure tensor and deep learning library. https://github.com/uncomplicate/deep-diamond#2021-05-2114:39Jakub Holý (HolyJak)Tired of being forced to use the browser every time you need to refresh an OIDC token to authenticate with a backend service? Finally there is a CLI tool for that - the #babashka and Docker powered oidc_client.clj https://gist.github.com/holyjak/ad4e1e9b863f8ed57ef0cb6ac6b30494
Upon first invocation it opens up a browser for the OIDC provider login, thereafter it caches the refresh token and uses it as long as it remains valid.#2021-05-2114:40Jakub Holý (HolyJak)@U04V15CAJ feel free to copy this if you want to add it to the bb examples/#2021-05-2115:43borkdudeLooking good! I think we can add it to https://github.com/babashka/babashka/blob/master/doc/projects.md
PR welcome#2021-05-2118:31Ivar RefsdalLooks good! Have you considered using - or recommending - mkcert for trusting self signed certs? It has worked effortlessly for me.
https://github.com/FiloSottile/mkcert/#2021-05-2317:34Jakub Holý (HolyJak)Thx, @UGJE0MM0W, mkcert looks great!#2021-05-2115:38plexusFirst release of com.lambdaisland/dom-types https://github.com/lambdaisland/dom-types
This is a ClojureScript library which adds print handlers for a bunch of built-in browser types, which generally makes working with them in the REPL much more pleasant. e.g. instead of #object[object HTMLElement] you'll get #js/Element [:p "hello world]. This also extends Datafiable to these types (great with Portal).#2021-05-2116:31Alex Miller (Clojure team)https://clojure.org/releases/tools#v1.10.3.849 is now available
• Adds support for a https://clojure.org/reference/deps_and_cli#_trailing_map_argument in -X calls (similar to Clojure 1.11 trailing map to vararg calls)
• Updates all Maven deps to latest (maven-resolver 1.7.0, maven core 1.8.3) to address these https://maven.apache.org/docs/3.8.1/release-notes.html
◦ CVE-2020-13956 - bumps deps on Apache HttpClient used by Maven
◦ CVE-2021-26291 - potential security problems regarding Maven repositories:
▪︎ Due to the possibility of MITM (man in the middle) attacks, http repo access is now blocked by default. tools.deps/Clojure CLI has always used https repos in the default repository list (central and clojars), so this mostly impacts any explicit http repositories defined in deps.edn
▪︎ Concerns over the "hijacking" of repository urls by transitive pom deps (or their super poms) to download artifacts from malicious repos. Maven made no changes here, but did clarify how repos are resolved on https://maven.apache.org/guides/mini/guide-multiple-repositories.html#repository-order. From a deps perspective, we only use repositories declared in the top-level deps.edn (if transitive deps need a custom repo, you will need to add it at top-level too). For tools.deps use of pom dependencies, we are providing the repos of the top deps.edn file (which should always put Maven Central and Clojars first), then deferring to Maven for the rest.#2021-05-2416:45match37The link for "trailing map of kvs" is broken#2021-05-2417:19Alex Miller (Clojure team)fixed#2021-05-2119:34Alex Miller (Clojure team)https://github.com/cognitect-labs/test-runner v0.3.0 is available
• Fixes #17 - use default ns regex only if no specific namespaces or regexes are supplied#2021-05-2417:57seancorfield@U064X3EF3 I just ran into the newly-introduced bug in the api -X runner — and saw someone already opened an issue for that.#2021-05-2418:06Alex Miller (Clojure team)wat#2021-05-2418:10Alex Miller (Clojure team)ok, fixed#2021-05-2418:10Alex Miller (Clojure team)I must have changed the docstring after I ran the tests? don't remember#2021-05-2418:19seancorfieldI commented on the commit that introduced the bug, if that helps 🙂#2021-05-2216:11borkdudeBabashka SQL pods 0.0.8
- Now also available on Windows!
- The Oracle and MySQL drivers are now available from the pod registry
https://github.com/babashka/babashka-sql-pods
https://github.com/babashka/pod-registry
Babashka SQL pods let you access databases from babashka scripts via the next.jdbc API.#2021-05-2302:50ivanaHello! I created yet another VS Code plugin for Clojure - https://github.com/Ivana-/bb-clj Source code & installation VSIX are avaliable, feel free to try it!#2021-05-2316:07ivanaI was just informed, that bb abbreviation is already strong associated with babashka project, so I added spesial comment to readme
Please, don't be confused if 'bb' reminds you the babashka project - it's just a coincidence, abbreviation for bare-bones
#2021-05-2321:08borkdudeFYI: the association is there because the command line tool is called bb and also the config file: bb.edn.#2021-05-2310:56borkdudeUse ClojureScript (interpreted by SCI) directly in an HTML <script> tag.
https://github.com/borkdude/sci-script-tag
https://borkdude.github.io/sci-script-tag/
Experimental, feedback welcome.#2021-05-2311:16pezTotally awesome. #2021-05-2314:37borkdudeNow also with Reagent plugin:
https://borkdude.github.io/sci-script-tag/#reagent#2021-05-2314:48pezCan I put the script in a cljs file and include with something like
<script src="hello_world.cljs" type="application/x-sci"></script>
#2021-05-2314:49borkdudehmm, not sure how that can be implemented yet, interesting#2021-05-2314:50borkdudemaybe it already works? not sure ;)#2021-05-2314:57borkdudeit seems there is a hack needed for this#2021-05-2315:03pezI should have tried myself, but am in the middle of something and mainly letting myself be distracted by this new cool thing of yours.#2021-05-2315:13borkdude@U0ETXRFEW I am pushing a new commit which supports this#2021-05-2315:14borkdudenote that SCI doesn't support all of CLJS so don't expect a random CLJS project to work, but you should be able to put snippets in there which are supported#2021-05-2315:16borkdudeok works now#2021-05-2315:17pezHaha, you amaze me!#2021-05-2315:23pezSo, when working with an SPA project where we shared a lot of code between backend and frontend and where we server side rendered the SPA entry pages which when rendered in the browser “became” the SPA, there was still one thing I couldn’t solve. We had this quite involved business logic that powered a calculator on the web page. We had the same business logic used in the backend. While the SPA was being loaded and started, the calculator didn’t work. I’m looking at this script tag you’ve made and wondering if maybe it could be used for server side rendering fully functional pages. Don’t know if I am making sense, but anyway. (And, yes, I heard you about “not all CLJS”, even if I am reading in a “yet” there 😄.)#2021-05-2315:24borkdudehttps://borkdude.github.io/sci-script-tag/#src#2021-05-2315:26pezI might experiment with what I just rambled about and see if it could be true.#2021-05-2315:27borkdudeI would be surprised ;)#2021-05-2406:06kardanI had this project laying around for a long time. It came in my mind after talks about variants and issues we at the time had at work. I packaged it together and “released” something a bit more cleaner than what it was earlier. In my mind it could fit well in a system of micro services or could be used as part of a data pipeline. Anyway, enough “ramblings”. Let me introduce Taxa - a thought experiment in hierarchical domain logic for Clojure & ClojureScript. https://github.com/kardan/taxa#2021-05-2520:46Michaël SalihiHi, I recently developed https://github.com/prestancedesign/inertia-clojure a Clojure adapter for http://Inertia.to to create SPA applications without writing an API.
Here is the porting of the original Ping CRM complete demo written in Laravel/PHP to Clojure Ring, Integrant, Reitit and next.jdbc:
https://github.com/prestancedesign/clojure-inertia-pingcrm-demo
All features and page are done:
• Session authentication login/logout
• Users, Organizations, Contacts pages
• Advanced filters (search input, with/without trashed items)
• Pagination
• Delete /restore items
• Input form validation
To try it, simply clone the repo and run:
clj -M:run
Feedbacks welcome!#2021-05-2620:42Michaël SalihiI just put online the demo https://inertia.prestance-design.com#2021-06-0711:43tvaughanI just came across https://github.com/blitz-js/blitz. Thought you might be interested @UFBL6R4P3#2021-06-0718:57Michaël SalihiThanks @U0P7ZBZCK, I'll check this!#2021-05-2620:42Michaël SalihiI just put online the demo https://inertia.prestance-design.com#2021-05-2617:52pezIn Calva 2.0.198 we add two standalone ClojureScript Quick Start REPL commands. One for browser ClojureScript and one for node. This makes it as easy to try out editor-connected ClojureScript as it is for Clojure. I’m attaching a super short video where I demo the feature while it was in development, but the released feature looks pretty much the same. https://calva.io/getting-started/#there-are-standalone-clojurescript-quick-start-repls#2021-05-2622:36practicalli-johnhttps://github.com/practicalli/clojure-deps-edn updated with newest library versions using :project/outdated alias which runs antq
New aliases added
• :format/zprint - format Clojure code and Edn data structures
• :project/depify - generate a Clojure CLI deps.edn configuration from Leiningen project.clj#2021-05-2908:00niwinzhttps://github.com/funcool/cuerdas/blob/master/CHANGES.md#version-20210529-0
Important release of funcool/cuerdas: removes the xregexp dependency and becomes a 0 external dependency library, reducing considerable the js bundle size.#2021-05-2919:08roklenarcicMy Memento library now has a Redis-backed caching implementation as a companion library:
https://github.com/RokLenarcic/memento-redis#2021-05-2923:11marciolHi all. I just ported the awesome @borkdude spartan.spec to ClojErl (from @jfacorro). I started an effort to port some libraries and this is the first.
https://github.com/marciol/spartan.spec#2021-05-3100:12wilkerlucioHello everyone! I have some updates on the development of Pathom 3 to do share. Improvements to error handling, a new strategy for graph optimizations and the start of getting distributed query processing. Check it out at https://blog.wsscode.com/pathom-updates-10/#2021-06-0221:10uochanJust released antq ver 0.15.0, Tool to point out your outdated dependencies.
https://github.com/liquidz/antq
Now offers a Leiningen plugin as a more accurate way to check dependencies for Leiningen projects.
Thanks a lot @vemv !#2021-06-0322:14mike_ananevAlpha version of PlantUML wrapper for Gantt diagrams.
https://github.com/redstarssystems/gantt#2021-06-0403:39Alex Miller (Clojure team)The StackOverflow 2021 survey is open and they have re-included Clojure this year! A great opportunity to make our representation known...
https://stackoverflow.com/dev-survey/start#2021-06-0407:14raspasovI filled it out 👍#2021-06-0417:51bringeCalva version 2.0.199 is out with an improvement to the debugger call stack. Additional stack frames are now shown in VS Code's call stack view during a debug session and some can be clicked to navigate to the relevant line of code. See a https://calva.io/debugger/#viewing-the-call-stack.#2021-06-0421:46Sam RitchieI’ve just released v0.19.0 of the #sicmutils computer algebra system! This release adds a bunch of performance improvements, speeding up simplification by up to 60x for more complicated problems. The whole library is much zippier. Specific additions:
• a powerful, extensible https://github.com/sicmutils/sicmutils/blob/master/src/pattern/rule.cljc with a huge number of simplifier rules built-in. The design is based on the pattern matcher in Gerald Sussman’“s https://amzn.to/34PU3h6”, but designed for Clojure vs MIT Scheme.
• high-performance multivariate https://github.com/sicmutils/sicmutils/blob/master/src/sicmutils/polynomial.cljc and https://github.com/sicmutils/sicmutils/blob/master/src/sicmutils/rational_function.cljc implementations
• slimmer build, and features like a-la-carte simplification and expression factoring
Clojars: https://clojars.org/sicmutils/sicmutils
detailed release notes: https://github.com/sicmutils/sicmutils/releases/tag/v0.19.0
cljdoc: https://cljdoc.org/d/sicmutils/sicmutils/0.19.0
Cheers!#2021-06-0612:12Jakub Holý (HolyJak)It would be nice to have a textual explanation and few examples for the patter matching. Reading the multiple ns isn't so simple 🙏#2021-06-0714:16Sam Ritchie@U0522TWDA yup, lots to do! the pattern matcher is in service of symbolic expression simplification, so even though it’s a pretty big project on its own I’m having to prioritize how deep I can go on this first pass#2021-06-0714:18Sam Ritchie@U0522TWDA but I am happy to point at lots of examples from the namespaces and tests!
(let [r (rule (+ ?x ?x) => (* 2 ?x))]
(r '(+ z z)))
#2021-06-0714:23Sam Ritchiea short tour:
• the “rule” macro is the main thing: https://cljdoc.org/d/sicmutils/sicmutils/0.19.0/api/pattern.rule#rule
• the “syntax” namespace defines most what you can include in the matching part, ie, the first form you pass to rule: https://github.com/sicmutils/sicmutils/blob/master/src/pattern/syntax.cljc#L25
• the form is “(rule <pattern> <predicate> <template>)“, all explained in the rule docs. => is a function that just always returns true.
• the rule has a bunch of “combinators” that let you do things like, take a rule, and return a NEW rule that tries to apply its rule to every nested form, bottom up, in a nested data structure… and lots more stuff.
Here’s an example of a macro called ruleset that takes LOTS of rule forms, and tries each one down the list; the whole rule returns on the first match, and if none match, it returns its input.
(ruleset
(sin (asin ?x)) => ?x
(cos (acos ?x)) => ?x
(tan (atan ?x)) => ?x
(sin (acos ?x)) => (sqrt (- 1 (expt ?x 2)))
(cos (asin ?y)) => (sqrt (- 1 (expt ?y 2)))
(tan (asin ?y)) => (/ ?y (sqrt (- 1 (expt ?y 2))))
(tan (acos ?x)) => (/ (sqrt (- 1 (expt ?x 2))) ?x))
#2021-06-0714:34Sam Ritchiemaybe a more fun example, these two are equivalent, and I WOULD ARGUE that the second is clearer:
(defn- mul [a b]
(cond (and (v/number? a) (v/number? b)) (g/mul a b)
(v/number? a) (cond (v/zero? a) a
(v/one? a) b
(product? b) `(~'* ~a #2021-06-0714:43Sam Ritchiehttps://twitter.com/sritchie/status/1401912537147490306#2021-06-0715:17Jakub Holý (HolyJak)thanks a lot! it is much clearer already! 🙂 Examples help a lot.#2021-06-0717:29Sam Ritchietotally! there are a ton more in the tests: https://github.com/sicmutils/sicmutils/blob/master/test/pattern/rule_test.cljc#2021-06-0717:30Sam Ritchieand then a huge number of rules, organized not-terribly-well, in https://github.com/sicmutils/sicmutils/blob/master/src/sicmutils/simplify/rules.cljc#L275. These are all from the original scmutils library; a goal of mine is to organize these into clear buckets, then publish them separate from this library so anyone wanting to deal with mathematical expressions can have a huge set to choose from#2021-06-0607:57Ben SlessJust release v0.0.10 of https://github.com/bsless/clj-fast with a bunch of improvements and extra features
• even faster merge
• faster (r)subseq
• variadic arity assoc-in which emits minimal code
Clojars: https://clojars.org/bsless/clj-fast
Release notes: https://github.com/bsless/clj-fast/releases/tag/v.0.0.10
Cljdoc: https://cljdoc.org/d/bsless/clj-fast/0.0.10/doc/readme#2021-06-0709:36Adam HelinsIt is not always easy writing a CLJC library, having to handle both Clojure and Clojurescript. So here is a little template that might help you: https://github.com/helins/templ-lib.cljc
Not saying that it is perfect (it isn't), but you might get some inspiration 🙂#2021-06-0709:45Adam HelinsHappy to take PRs though, if there are obvious improvements that can benefit everyone#2021-06-0710:30pezGreat! I am one that looks for templates when I am about to do something new. Last time I made a cljc library, I noticed the lack for templates here. 😀#2021-06-0721:26vemvhaving authored similarly focused templates, one thing I'd recommend is to template the CI integration as well. Especially featuring a comprehensive test matrix#2021-06-1014:08Adam Helins@U45T93RA6 Quite right! Although I am not sure if it should be part of the template itself. I often disliked templates where you have to spend some time removing everything you don't want. So for the time being at least I've added it to an "extra" folder in the repo.#2021-06-0710:03Adam Helinstest.check is a wonderful tool. It helps me find edge cases even in very simple, dumb assertions. For any non-trivial example, it is a bliss.
However, from experience, it is often hard locating precisely what make a test fails in any non-trivial example. I hope this couple of lightweight abstractions will help you as much as they helped me in organizing your generative tests and being highly productive: https://github.com/helins/mprop.cljc#2021-06-0710:14imreThis looks interesting. Would it make sense to add an example or two about how failing test output compares to when multiplexing isn't used?#2021-06-0819:38Jakub Holý (HolyJak)A typo in the Readme :effictive#2021-06-1014:32Adam Helins@U08BJGV6E Indeed, it was maybe too abstract. I added outputs in README, hopefully it's clearer#2021-06-1014:33imrenice one#2021-06-0710:55Karol WójcikDuring the weekend I've made a really simple text-to-speech application which demonstrates the power of holy-lambda, AWS Polly, babashka runtime and scittle. Hope you will like it guys.
Demo: https://youtube.com/watch?v=XJc6xma7v0Ahttps://t.co/uQ0JlE0N0p?amp=1
Project: https://github.com/FieryCod/holy-lambda/tree/master/examples/bb/babashka/talk-with-babashkahttps://t.co/vsFHiGVkU8?amp=1#2021-06-0712:54Mathieu CorbinI'm happy to announce a new release of Mirabelle (https://github.com/mcorbin/mirabelle), a stream processing engine for monitoring heavily inspired by Riemann (http://riemann.io).
I also wrote recently a documentation website for it (https://www.mirabelle.mcorbin.fr/), and published today an article about how I use it for blackbox monitoring (https://www.mcorbin.fr/posts/2021-06-07-mirabelle-cabourotte-blackbox/).
As always, i'm open for feedbacks 😉#2021-06-0820:23Jakub Holý (HolyJak)Mirabelle use the same protocol than Riemann. - should be "as"?
Streams clocks -> Streams' clocks?#2021-06-0920:59Michaël SalihiThat's it! The Reagent frontend of inertia Ping CRM Clojure / ClojureScript port is 100% done!
• Online demo updated and it's very fluid: https://inertia.prestance-design.com
• Complete backend + frontend source code: https://github.com/prestancedesign/pingcrm-clojure#2021-06-1006:30rakyiCool stuff! Although, 3.2 MB of CSS is a lot. JS bundle is also quite big for what it does. Is that because of Inertia?#2021-06-1006:42Michaël SalihiThanks for your feedback!
Optimization was not my priority until now.
Writing the back and front end was time consuming knowing that I also had to write this library https://github.com/prestancedesign/inertia-clojure to make Inertia works with Clojure.
Configuring PostCSS + Tailwind purge will fix the file size concern, this is the next and current step.
Stay tuned!#2021-06-1007:47tatutreally nice#2021-06-1008:20Michaël SalihiThanks @U11SJ6Q0K!#2021-06-1009:22tatut<body class="font-sans leading-none text-gray-700 antialiased">
<div data-page="{"component":"Organizations/Index","props":{"organizations":{"data":[{"postal_code":"18808-dfgf","address":"36196 Fritz Plaza Suite 984","email":"
this was surprising to me, I would’ve thought that there is a length limit in data attributes, but apparently in html5 there is no limit#2021-06-1010:06Michaël SalihiExactly, no limiit.
However to take into consideration, the browser history state limit even if it is wide:
https://inertiajs.com/responses#maximum-response-size#2021-06-1010:13Michaël SalihiNote that the server-side rendering is coming, it's only in early access for sponsors for the moment.
I have access to it so it's the next step I'm going to have fun on. 🙂#2021-06-1010:14Michaël SalihiThe SSR demo: https://ssr-demo.inertiajs.com/#2021-06-1010:18tatutthat’s running React on the backend to render it, I assume#2021-06-1010:39Michaël SalihiYes, there is also solutions for Vue and Svelte too.
https://inertiajs.com/server-side-rendering#2021-06-1015:40Michaël Salihi@U751SU53R
> Although, 3.2 MB of CSS is a lot.
FYI The repo contains now the PostCSS and Tailwind setup! The CSS size is drop to 7,22 Kb Gziped (27,46 Kb)#2021-06-1015:40Michaël Salihihttps://github.com/prestancedesign/pingcrm-clojure/commit/703bbb60d87303ea0b67c0b386c7e5dd347f88e0#2021-06-1015:56rakyiNice! Curious how much Inertia increases the JS (or CSS) bundle size by itself. Do you happen to know? Can’t find it in their docs.#2021-06-1018:39Michaël SalihiInertia is not responsible and therefore has no impact on the CSS.#2021-06-1018:43Michaël SalihiHere, you can check a report build with npx shadow-cljs run shadow.cljs.build-report: https://inertia.prestance-design.com/js/report.html
Compared to the values on this site, the bundle sizes match:
• https://bundlephobia.com/package/@inertiajs/inertia@0.9.2
• https://bundlephobia.com/package/@inertiajs/inertia-react@0.6.2#2021-06-1012:35Ivar RefsdalI'm pleased to announce recurring-cup, a simple scheduler for daily/weekly occurrences that supports timezones. Schedules are represented using Clojure seqs, and thus you may tweak them using standard filter, remove, etc. should you so like. It's built on top of the excellent tea-time.
https://github.com/ivarref/recurring-cup#2021-06-1014:08chrisnOur high performance data processing system, https://github.com/techascent/tech.ml.dataset is out of beta and has reached version 6.00! It was quite a long beta but the system has been quite stable for a while. tmd allows you to process very large datasets interactively at the repl in a DataFrame style like Pandas or R's data.table. It performs https://github.com/zero-one-group/geni-performance-benchmark/ than any of the comparative options and was written from the ground up in Clojure.
• Checkout my talk about https://www.youtube.com/watch?v=5mUGu4RlwKE.
• For more Clojure data science-centered work checkout the https://scicloj.github.io/pages/libraries/ and especially https://github.com/scicloj/metamorph. There is a lot of great stuff there!
• If you are looking just for great mathematics https://github.com/generateme/fastmath#content most of R's core mathematical library.
P.S. - as Alex posted above, if you haven't filled out the Stack Overflow https://stackoverflow.com/dev-survey/start, please do so! It really helps us all out.#2021-06-1115:12Tamizhvendan SHi folks,
I just published a new version of https://cljdoc.org/d/org.graphqlize/honeyeql/0.1.0-alpha36/doc/readme after a one-year break.
This new version adds support for https://cljdoc.org/d/org.graphqlize/honeyeql/0.1.0-alpha36/doc/aggregate-queries & https://cljdoc.org/d/org.graphqlize/honeyeql/0.1.0-alpha36/doc/attributes#one-to-one relationships.
I've also added documentation for https://cljdoc.org/d/org.graphqlize/honeyeql/0.1.0-alpha36/doc/debugging-troubleshooting.#2021-06-1116:04seancorfieldExpectations — an expressive, clojure.test-compatible testing library — has a prerelease of 2.0.0 available: https://cljdoc.org/d/com.github.seancorfield/expectations/2.0.0-alpha2/doc/readme — the main changes from the previous version (1.2.1) are:
- improve “drop-in” compatibility with clojure.test (by re-exporting several clojure.test features so you don’t need to require that as well as Expectations)
- provide cljs.test-style fixtures (hash map with :before and :after functions) in addition to the regular clojure.test fixtures
- provide standalone (self-hosted) ClojureScript compatibility (via planck, thanks to @kkinear) — previously, Expectations was Clojure-only
- moves to com.github.seancorfield/expectations (formerly expectations/clojure-test)
Follow-up in #expectations for specifics or #testing for general stuff.#2021-06-1123:20Cam SaulOut of curiosity, are you still using Expectations yourself? We recently finished migrating ~60k lines of expectations-based tests in Metabase to clojure.test earlier this year, mostly because there's better tooling around it.
This was easy to accomplish piecemeal by writing removing the dependency on expectations and writing
(expect ...) https://github.com/metabase/metabase/blob/release-x.38.x/test/expectations.cljthat expanded out to a
(deftest some-name-based-on-test-hash
(expect= expected actual))
and then defining a clojure.test/assert-expr impl for expect= .
The main reason I'm asking is it looks like the migration path from expectations 1 -> expectations 2 seems like it would be about the same amount of work as migrating directly over to clojure.test . So if I were to convert another project using Expectations 1 (I still have a few around actually), would it really make sense to convert it to Expectations 2 instead of just converting it to clojure.test?#2021-06-1200:04seancorfield@U42REFCKA This is not the original Expectations. This is the clojure.test-compatible version. All of the clojure.test tooling works with this version of Expectations.#2021-06-1200:05seancorfieldlein test, Cursive’s test runner, Polylith’s test runner, Cognitect’s test-runner all work with this. And you can mix’n’match “old school” clojure.test assertions and the more expressive expect expressions.#2021-06-1200:06seancorfield“it looks like the migration path from expectations 1 -> expectations 2 seems like it would be about the same amount of work as migrating directly over to `clojure.test`.” — not sure what gives you that impression? Did you actually check out the docs?#2021-06-1200:07seancorfield(and, yes, we use this version of Expectations very heavily at World Singles Networks with standard clojure.test runnners)#2021-06-1200:14Cam SaulRight, I understand that.
It just seems like the main benefit of upgrading from the class Expectations lib -> Expectations 2 is that is uses clojure.test under the hood, but with the syntax changes it seems you'd have to rewrite everything either way.
Example: a classic Expectations test might look like
(expect
1000
(inc 999))
I could rewrite that as clojure.test as
(deftest my-test
(is (= 1000
(inc 999)))
or as
(defexpect my-test
(expect 1000
(inc 999)))
the effort involved in migrating such a test seems roughly equivalent. For a few cases where Expectations has different semantics, you could just write your own assert-expr that behaves the same way as Expectations used to, e.g. for comparison against regexes or Exception classes, so for converting several hundred or thousand tests it wouldn't make a huge difference.#2021-06-1200:17seancorfieldWe switched from (classic) Expectations to the clojure.test-compatible version that I developed ages ago. This is the 2.0 version of that library. Migrating to the clojure.test-compatible version was simply a matter of wrapping each namespace’s set of (expect ..) forms in a single (deftest some-name ..) form.#2021-06-1200:18Cam SaulGotcha. I'm just trying to understand (as the maintainer of a few libraries that still use classic expectations-style tests) if migrating to this Expectations 2 lib would be easier than migrating to clojure.test . And whether this Expectations 2 lib is intended more as a stepping stone to eventually migrating to clojure.test entirely or not#2021-06-1200:19seancorfieldNo, you don’t need to migrate to clojure.test. Just wrap (deftest some-name ..) around a big group of (expect ..) forms, and switch from the old Expectations require to this new one. It’s a trivial migration, and can be done one ns at a time.#2021-06-1200:20seancorfield(that’s how we migrated)#2021-06-1200:22Cam Saulok, gotcha. that makes sense. thanks#2021-06-1200:22seancorfieldThe README link I posted explains why this version exists and what the differences are from the “classic” Expectations. And shows a mix’n’match example:
(deftest mixed
(is (= 2 (+ 1 1)))
(expect even? (+ 1 1)))
#2021-06-1200:24seancorfieldWe’ve been using this version for about two and a half years at work. Happy to help you migrate any of your existing libraries from “classic” Expectations to this version — so you get to keep all your expect forms, and just wrap them in named tests 🙂#2021-06-1200:25seancorfieldI created it because “classic” Expectations needed custom tooling and did not work with CIDER or Cursive 🙂#2021-06-1200:26seancorfieldAnd you can (expect ::some-spec (my-fn 1 2 3)) so you get Spec support built-in, which I’m pretty sure did not exist in the “classic” version…#2021-06-1200:34Cam SaulGotcha. One more question. IIRC I took a look at the 1.x version of your lib at one point but the semantics were a little different from the old Expectations lib, so it wasn't directly compatible. For example,
(expect
(re-pattern "\\d+")
"1000")
passes in "classic" Expectations, but in the new lib it doesn't (or at least didn't) because it's macro-based and the expected form isn't a regular expression yet at macroexpansion time. I don't know if that's been fixed or not yet, but at a glance it still looks like you'd run into the same thing https://github.com/clojure-expectations/clojure-test/blob/develop/src/expectations/clojure/test.cljc#L381#2021-06-1200:42Cam SaulIs maintaining the same exact semantics as legacy Expectations a project goal? Or is the expectation (pun intended) that a few tests here and there will have to be rewritten?#2021-06-1200:53seancorfieldI would consider that a bug, if it worked in “classic” Expectations and not in the clojure.test-compatible version.#2021-06-1200:55seancorfieldAlthough (re-find #"\\d+" "123") => nil so I don’t think that expectation would pass either?#2021-06-1200:56Cam Saul(re-pattern "\\d+") -> #"\d+"
#2021-06-1200:57Cam Saulthe escaped slash gets unescaped#2021-06-1201:08Cam SaulI just double-checked, and
(expect
(re-pattern "\\d+")
"123")
definitely passes on old-school legacy classic traditional Expectations. I think there were a few other related test failures I ran in to last time I tried it. For example in Metabase we had a lot of places where we wrote tests that ran against different databases (e.g. Postgres/MySQL/H2/Oracle/SQL Server/etc.) depending on which CI node we were on e.g.
(expect
(if (testing-some-completely-broken-database?)
some-form
some-other-form)
do-something)
I think basically anywhere where the expected form has any sort of logic doesn't work with the macro-based expect approach. I ended up just writing an assert-expr method that does appropriate comparisons/assertions after the expected form is evaled#2021-06-1116:20jmvHi all, wanted to share https://github.com/nytimes/vase.elasticsearch
This adds Elasticsearch bindings to Vase so that you can build out simple search systems in a data-driven manner. We currently use it to power the NYT cooking search as well as some internal search systems.#2021-06-1121:19Oliver GeorgeSounds interesting. Would you mind giving us the elevator pitch? For the initiated…#2021-06-1210:30vemvI'm a (positively) surprised Vase is still in use, I thought it had lost traction :)#2021-06-1417:10jmv@U055DUUFS sure! this follows on the same basic premise as https://github.com/cognitect-labs/vase/blob/master/docs/design.md: a concise way to specify simple microservices for some business need. this library extends vase to add support for elasticsearch so that you can add search to a microservice or make a full search oriented microservice.
we use this internally so that small teams can spin up search for their product without having to have deep knowledge about running the entirety of a search system. so we take care of the infra and the data sources and let product teams create these concise specifications of search for their business domain#2021-06-1117:50Luis Thiam-NyeInitial public release of snoop — use malli schemas to instrument functions and validate inputs & outputs at runtime.
• Compatible with both Clojure and ClojureScript
• Convenient schema notation or use m/=>
• Works with multi-arity functions
• Configuration options for runtime and compile-time
• Uses a custom defn wrapper macro that hopes to be easier to combine with other defn wrappers
• Alpha
I've found instrumentation to be very helpful in tracking down errors in data-heavy situations.
https://github.com/CrypticButter/snoop#2021-06-1118:43ikitommiAdded link to malli README. Congrats on the release!#2021-06-1209:31borkdudeJust out of curiosity, is there a reason why such functionality isn't included in malli itself yet? Future plans? @U055NJ5CC#2021-06-1211:47ikitommithere are at least 4 different flavours of schematized defn macros in the wild and Rich is doing/thinking something new for this. Don't wont to make any one standard now. All anyway share m=> machinery, all contribute to same registry, get clj-kondo for free etc. The Plumatic-style will be an optional part of malli, as I like the most 😎#2021-06-1211:48borkdude:)#2021-06-1513:08Luis Thiam-NyeI've updated the library to allow specifying schemas next to each parameter declaration, like you can with Plumatic. Personally, I'm not terribly keen on peppering the params vector with :- and commas, so I decided on lists instead:
(>defn fun
[(x int?) (y int?) (z melon?)]
[=> string?]
...)
https://github.com/CrypticButter/snoop#inline-schema#2021-06-1513:09borkdude@U016JRE24NL One benefit of using the Schema notation would be that the syntax is supported out of the box with clj-kondo :)#2021-06-1513:12Luis Thiam-Nye@U04V15CAJ I provided a clj-kondo config export in the repository 👍.#2021-06-1513:12borkdudeah that works too :)#2021-06-1513:12borkdudelooks good! https://github.com/CrypticButter/snoop/blob/main/resources/clj-kondo.exports/com.crypticbutter/snoop/clj_kondo/crypticbutter/snoop.clj#2021-06-1215:04borkdudeThe first release of scittle is available (v0.0.1), hosted on JSDelivr:
https://github.com/borkdude/scittle/releases/tag/v0.0.1
Scittle lets you evaluate ClojureScript programs in script tags, without setting up a CLJS project, via the Small Clojure Interpreter.
New since the first commit:
- Reagent plugin
- CLJS-Ajax plugin
Usage: https://borkdude.github.io/scittle
Also check out this all new full stack luminus guestbook example: https://github.com/kloimhardt/babashka-scittle-guestbook#2021-06-1215:35seancorfieldThis is just… sorcery! wizard#2021-06-1217:32henrikSCI is eating the world#2021-06-1217:40natesorsciry#2021-06-1218:13eccentric JVery cool!#2021-06-1223:03bherrmanninconceivable#2021-06-1302:23nateinconscivable#2021-06-1305:58Adam HelinsHave... to go... further... Can SCI run SCI? 😂#2021-06-1413:55eggsyntaxWheeeee! awesome#2021-06-1412:10Divya PatelHey guys! Here is an interesting opportunity for all women coders to win prizes up to Rs. 20 Lakh with their coding acumen. http://Monster.com has come up with 'Technodiva', a coding contest exclusively for women. For registering, please go to the following link :-
Register here for more detail: https://bit.ly/2RUDbTu#2021-06-1412:13pezThis is not a project/library announcement so it doesn’t fit here. Unless it has Clojure relevance I don’t think where it would fit, actually. Maybe in #off-topic. Deleting.#2021-06-1417:37ericdalloclojure-lsp Released new https://clojure-lsp.github.io/clojure-lsp/ version with a huge improvement on source-paths discovery for deps.edn projects behaving pretty similar to Cursive 🎉
This should make clojure-lsp works well for mono-repo and polylith projects 😄 For more information, please come to #lsp!#2021-06-1605:29tony.kayFulcro 3.5.0-RC1 is now available on clojars:
https://github.com/fulcrologic/fulcro
This release adds wider support for using Fulcro's data management facilities (networking, normalization, etc.) in non-React apps, includes wider support for using Fulcro via raw React hooks, and also includes facilities for more easily dynamically generating normalizing components via pure data at runtime.#2021-06-1705:54seancorfieldcom.github.seancorfield/next.jdbc "1.2.674" — https://cljdoc.org/d/com.github.seancorfield/next.jdbc/1.2.674/doc/readme --
* Fix #167 by adding :property-separator to next.jdbc.connection/dbtypes and using it in jdbc-url.
* Address #166 by adding next.jdbc/with-logging to create a wrapped connectable that will invoke logging functions with the SQL/parameters and optionally the result or exception for each operation.
Fix Getting Started* (were :unit_cost).
* Update test-runner.
Follow-up in #sql#2021-06-1706:04seancorfieldcom.github.seancorfield/honeysql "2.0.0-rc3" — https://cljdoc.org/d/com.github.seancorfield/honeysql/2.0.0-rc3/doc/readme --
* Fix #328 by adding :distinct as special syntax, affecting an expression.
* Address #327 by changing “unknown clause” error to including mention of “nil values” (which are also illegal).
* Fix #327 by making single-argument helpers consistent with multi-argument helpers.
* Support PostgreSQL’s && array operator.
Clarify how to Getting Started*).
* Update test-runner.
Follow-up in #honeysql#2021-06-1719:14mauricio.szaboJust published Chlorine v0.12.0 for Atom - in this release, fixes for Lumo and Clojerl socket REPLs, an improved "Doc for Var" that uses markdown to render documentation (toggable - you can disable that) and also gets source (if it's a function) or var contents (if it's not) for most, if not all, REPLs that Chlorine supports. I'll publish a Clover version soon also - discussions on #chlorine-clover 🙂#2021-06-1801:04Cam SaulMethodical 0.12.0 is out -- notable features include https://github.com/camsaul/methodical/releases/tag/0.12.0 (click link for screenshot) and a handful of bugfixes. This was inspired by http://christophe.rhodes.io/notes/blog/posts/2018/sbcl_method_tracing/. Probably the most common reason I've heard against using fancy CLOS-style multimethods with :before , :after, and :around aux methods (like Methodical provides) is that they're harder to debug. That certainly used to be true. With the new trace facilities, Methodical multimethods are actually easier to debug than vanilla Clojure multimethods (allegedly). 😎#2021-06-1801:17eggsyntaxVery cool!#2021-06-1811:26Azzuritesomehow I'd like each library to have a "why?" somewhere in their documentation 😄 can someone explain to me for what, or why, I'd use this library? currently, I don't see it#2021-06-2200:58Cam SaulHere are a few reasons.
A) Vanilla multimethods in Clojure either dispatch to a specific method or :default but there's no in-between. You can't do something like
(defmulti describe-animal-location (fn [animal location] (keyword animal) (keyword location)))
(defmethod describe-animal-location [:bird :tree]
[_ _]
"Bird in a tree")
;; can't do this
(defmethod describe-animal-location [:default :tree]
[animal _]
(str animal " in a tree"))
B) Aspect-oriented programming. Write a single logging method for all your implementations.
(m/defmethod describe-animal-location :before :default
[animal location]
(println "describe-animal-location called with" animal location)
location)
C) next-method.
In Clojure if you want call the "parent" method, you'd have to do something like
(defmethod describe-animal-location [:songbird :tree]
[animal location]
(println "A songbird is in a tree.")
((get-method describe-animal-location :bird :tree) animal location))
That requires you to know what the "parent method" is. In Methodical you can simply do
(m/defmethod describe-animal-location [:songbird :tree]
[animal location]
(println "A songbird is in a tree.")
(next-method animal location))
D) Programmatic multimethod creation.
Normal multimethods can't be passed around and modified on-the-fly like normal functions or other Clojure datatypes -- they're defined statically by `defmulti`, and methods can only be added destructively, by altering the original object. Methodical multimethods are implemented entirely as immutable Clojure objects (with the exception of caching).
(let [dispatch-fn :type
multifn (-> (m/default-multifn dispatch-fn)
(m/add-primary-method Object (fn [next-method m]
:object)))
multifn' (m/add-primary-method multifn String (fn [next-method m]
:string))]
((juxt multifn multifn') {:type String}))
;; -> [:object :string]
E) Custom invocation behavior: you can write a multimethod that invokes all its implementations -- the canonical use-case for this is creating a shutdown hook.
F) Debuggability: You can use tools that ship with Methodical like trace to see what methods are getting called and trace calls to a multimethod#2021-06-2506:27AzzuriteThanks @U42REFCKA! However I think you missed my point a bit 😄 I understood (some of it, because it does a lot) what features the library has - and that's what you explained here again. The question wasn't "what" - it was "why"? Why do I want to use A) (i.e. what would a use-case be where I couldn't easily handle it some other way)? Or B), C), D), E)?
I just don't see the applications of the features. I.e. why I would use this library instead of something else. For example for E) (one of the only ones where you mentioned an application), I can just create a collection of functions and call those during shutdown. Why use multimethod implementations for that?
(F, debuggability, I understand the why of course - but if I just want to debug something there are also some other very good libraries/tools out there - I wouldn't want to use a multimethod replacement just for better debugging)#2021-06-1801:39Cam SaulAlso: lein-check-namespace-declshttps://github.com/camsaul/lein-check-namespace-decls#add-an-alias-to-depsedn`deps.edn`https://github.com/camsaul/lein-check-namespace-decls#add-an-alias-to-depsedn. Elevator pitch: Tired of people writing ns forms like
(ns my-namespace
(:require [some.thing [else :as else] [x :as x]]
[another.namespace.b :as b]
[didnt.even.use.this :as unused]
[another.namespace.b :as b]
[another.namespace.a :as a]))
? Wish you had a linter that would complain if you didn't sort your :require s, or if you had duplicate requires, or unused ones, or if you used prefix-style requires when you prefer non-prefix-style (or vice versa)? You're in luck. https://github.com/camsaul/lein-check-namespace-decls#add-an-alias-to-depsedn can do all that and more, and even works on mixed Clojure/ClojureScript projects with reader conditionals in the ns form. And now, it supports deps.edn projects as well as Leiningen projects. (Sorry Boot users)
We've been using this plugin to keep almost 1200 namespaces looking sharp in https://github.com/metabase/metabasefor two and a half years now. Add it to your project today!
lein-check-namespace-decls isn't a good name for a project that isn't tied to Leiningen anymore, so I'm also soliciting suggestions for a new name here. Preferably a bird-related pun#2021-06-1801:49seancorfieldI’m curious about what this does that clj-kondo doesn’t do for ns forms?#2021-06-1801:51seancorfield(it checks for duplicates, unused, and unsorted — I suspect the prefix/non-prefix syntax check is unique to l-c-n-d)#2021-06-1802:00Cam Saulactually now that I look a little more closely, clj-kondo does 90% of what this linter does. 💀 I think enforcing prefix or non-prefix syntax might be the only difference. I wrote this a while before clj-kondo had namespace checking stuff tho.
I mostly updated this just because I've been using deps.edn for new libraries lately and I wanted to port some existing tooling over.
FWIW we're using both this linter and clj-kondo at Metabase. I'm more of a "can't have too many linters" person#2021-06-1802:02seancorfieldI almost never see prefix requires (and I think they’re horrible) so they’d never get into our codebase because they wouldn’t pass PR review 🙂#2021-06-1802:04seancorfield@U42REFCKA The README says “Add a :check-namespace-decls key to your project.clj to configure the way refactor-nrepl cleans namespaces. All options are passed directly to refactor-nrepl.” — how do you control this via CLI / deps.edn invocation?#2021-06-1802:05seancorfield(looking at the source, I could just pass all those options as :exec-args right? might want to mention that in the readme)#2021-06-1802:05Cam SaulI like to have things like that that can be determined programmatically enforced by linters if possible.#2021-06-1802:06Cam SaulSorry, I guess I need to go thru the README again and make sure it makes sense now that it works with either Leiningen or deps.edn. You just pass all the options as :exec-args instead of under the :check-namespace-decls key in project.clj e.g.
{:aliases
{:namespace-checker
{:extra-deps {lein-check-namespace-decls/lein-check-namespace-decls {:mvn/version "1.0.4"}}
:exec-fn check-namespace-decls.core/check-namespace-decls
:exec-args {:prefix-rewriting false
:source-paths ["src" "test"]}}}}#2021-06-1802:13Cam SaulAlso on a side note RE prefix namespaces. We were using them at Metabase for a long time. I came around to the benefits of flat namespace declarations a while back but I didn't want to deal with converting a thousand namespaces over all at once so we kept using prefix ones for a long time. I finally did a big PR to convert everything in January: https://github.com/metabase/metabase/pull/14281
I ended up writing some Emacs Lisp to find and then iterate over every Clojure file in the entire project, load the namespace, and call cljr-clean-ns on them so I was able to do it all programmatically. Still a big change tho.
So the linter helps ensure I don't end up having to do that sort of PR again 😅#2021-06-1802:34Cam Saul@U04V70XH6 while we're on the subject of linters do you know if anything else does something like this? https://github.com/camsaul/lein-docstring-checker
This is next on my list to port. This one is about 4 years old at this point. I don't think a lot of people care enough about docstrings to enforce them with a linter but I've found that having an "either document it or make it private" rule works well for libraries. For big projects it makes refactors easier too since stuff ends up being private more often you don't have to spend time grepping the codebase before renaming stuff (or for Metabase, we support 3rd-party database drivers, so we have to be careful about breaking stuff 3rd-party drivers might be using, so keeping more stuff private lets us move faster and make more improvements to the core project)
I don't want to waste time porting it and find out that clj-kondo/Eastwood/Bikeshed/Kibit/whatever added it last year 💀#2021-06-1802:43seancorfieldThat’s built into clj-kondo — I rely on that one a lot!#2021-06-1802:45Cam Saulhaha no way. I guess I need to pay more attention to what's going on with clj-kondo. 😅#2021-06-1802:46seancorfieldI still use Eastwood as part of CI for one project but I mostly just rely on clj-kondo for everyday use now, esp since it’s integrated with editors and LSP etc and so it can run all the time while you are typing.#2021-06-1802:46seancorfieldI think there are a lot of very specialized Leiningen plugins that really ought to just be archived at this point — they date back to a “simpler” era 🙂#2021-06-1803:03Cam SaulYeah. I might have to archive some of my old liters now. Better to pool efforts on Kondo and submit PRs there than to spend time maintaining old stuff #2021-06-1803:23vemvSee also https://github.com/gfredericks/how-to-ns#2021-06-1803:26richiardiandreaand last but not least zprint supports formatting according to "How to ns"
https://github.com/kkinnear/zprint/blob/master/doc/reference.md#how-to-ns#2021-06-1805:34pezMaybe you can find a name if you ask the question ”where's the poop in a Robin's nest?”. https://youtube.com/watch?v=lG7OmThrq5g#2021-06-1805:49seancorfieldCool video! 🙂 My education for the day 🙂#2021-06-1815:03richiardiandreaNice video! I've got a Robin's nest here and I now I am looking forward to the hatching :D#2021-06-1809:34borkdudeclj-kondo new release: 2021.06.18 ✨
New
- Lint arities of fn arguments to higher order functions (`map`, filter, reduce, etc.)
E.g. (map-indexed (fn [i] i) [1 2 3]) will give a warning about the function argument not being able to be called with 2 arguments.
- Add map-node and map-node? to hooks API
Enhanced / fixed
- Disable redefined-var warning in comment
- :skip-comments false doesn't override :skip-comments true in namespace config
- False positive duplicate set element for symbols/classes
https://github.com/clj-kondo/clj-kondo/blob/master/CHANGELOG.md#20210618
Happy linting!#2021-06-1822:10mauricio.szaboSo, I've been experimenting with adding a real prolog in Clojure. It's not yet feature-complete, but as a proof-of-concept, it's working for some examples! https://github.com/mauricioszabo/spock#2021-06-1822:14seancorfieldIf there are no solutions to a problem, does it respond with no? That was always one of things I found adorable about Prolog 🙂#2021-06-1822:15seancorfield(also, please make it work with deps.edn and the CLI 🙂 )#2021-06-1822:16mauricio.szaboHere's an example of n-queens example :D#2021-06-1822:17mauricio.szabo@U04V70XH6 hahahaha, not yet 🙂. Currently it returns an empty list only. But I'll handle these cases#2021-06-1822:29Jacob O'Bryant> How many Prolog programmers does it take to screw in a light bulb?
> No.#2021-06-1823:54mauricio.szaboBTW, I just saw that there's some confusion on the conversion (keywords translate to prolog atoms, but symbols sometimes become atoms, sometimes become vars).#2021-06-1823:55mauricio.szaboI think I'll make symbols become atoms all the time, and keywords become vars all the time. This makes more obvious how to unify things for example, and solvers will be less confusing#2021-06-2014:46pfeodrippeHi, released a overhauled version of Recife, now using TLC :)
Recife 0.3.0
- Use Clojure and the REPL;
- Visualize the trace;
- Hillel's examples from his book;
- Also an example using the incredible @jepsen_io's Elle lib.
Model checking your implementation is easier than ever, the lib is like re-frame in the sense that you just pass functions which receive a state and return another state.
One point that I would like to test later is to use pfeodrippe/arrudeia to have control over the scheduling of your application, with it you could. Another possibility is to test re-frame applications themselves given that it's async by default. Both need some form of instrumentation.
https://github.com/pfeodrippe/recife
Small release video at https://youtu.be/C9WwF4RXq74.#2021-06-2100:16Joshua SuskaloFarolero version 1.2.0 is released today!
Brief changelog:
• new macros for removing handlers and restarts in a dynamic context
• a new way for handlers and restarts to interact across threads, allowing easy use of reducers
• fixed some errors around exceptions automatically being translated to signals
https://github.com/IGJoshua/farolero#2021-06-2107:12Ertugrul CetinHi guys, I've created a 3D racing game built with ClojureScript, React and ThreeJS 🏎️ (Clone of pmndrs/racing-game)
https://github.com/ertugrulcetin/racing-game-cljs#2021-06-2120:37raspasovWow, very neat!#2021-06-2211:42Ertugrul CetinThank you!#2021-06-2600:09Young-il ChooI like how I can drive right into a mountain and see it from the inside 🙂#2021-06-2200:08Eric Scotthttps://github.com/ont-app/sparql-endpoint#2021-06-2204:59Lucy WangHey guys, I just released the 0.1.0 version of https://github.com/lucywang000/clj-statecharts, the finite state machine and statecharts library for clojure/clojurescript. This is the first formal release. I have being using it for a while in several internal applications, and it works pretty well insofar.#2021-06-2205:44jerger_at_ddaWe proudly present our new Keycloak Convention4Kubernetes deployment generator:
https://gitlab.com/domaindrivenarchitecture/c4k-keycloak
We provide the generator as jvm-library, js-webfrontend and standalone cli.
https://social.meissa-gmbh.de/tags/keycloak https://social.meissa-gmbh.de/tags/k8s https://social.meissa-gmbh.de/tags/c4k https://social.meissa-gmbh.de/tags/clojure https://social.meissa-gmbh.de/tags/clojurescript https://social.meissa-gmbh.de/tags/graalvm#2021-06-2306:51jerger_at_ddaToday we release a new version of mastodon-bot - the clojure version of a mastodon-twitter bridge:
https://gitlab.com/yogthos/mastodon-bot
With
• improved console out
• improved rss error handling
• updated dependencies
• provided spec as cljc
#clojurescript #mastodon #twitter#2021-06-2510:53NazralI'm happy to introduce https://github.com/Tyruiop/syncretism, a crawler + search engine for options (stock market's options) that can be easily deployed and ran locally. You can also https://ops.syncretism.io.
• full Clojure + Clojurescript
• Crawler has a simple scheduler to handle failures & rate limi
• depends only on mysql/mariadb
• provides a simple API to ease integration with other projects#2021-06-2522:52mauricio.szaboOk, the experiment continues: after seeing that's possible, indeed, to bind Prolog and Clojure, I made it work with SWI-Prolog (as TuProlog is quite slow): https://github.com/mauricioszabo/spock. Now, I want to check if it's possible to do a simple POC application and see where it shines, and also, see if I can use the WASM version of SWI prolog to make it work in ClojureScript. If anyone is familiar with Webassembly, please ping me 😄#2021-06-2604:24quantisanai.motiva/stepwise "0.6.0 - https://github.com/Motiva-AI/stepwise
Stepwise is a library for building AWS Step Functions with Clojure and EDN. Use it to coordinate asynchronous, distributed workflows with AWS managing state, branching, and retries. Some example use cases [1] include: orchestrating ETL jobs, orchestrating microservices, and orchestrating a chain of operation events (see the pattern?).
This is a first release with major updates in a couple years. We picked up this project from UW Laboratory for Precision Diagnostics and have been using it in production at Motiva for a few months. This is making our lives at Motiva a lot easier and I'd love to share it with you.
[1] https://aws.amazon.com/step-functions/use-cases/#2021-06-2609:43Jakub Holý (HolyJak)Thanks for sharing! I've had the misfortune of having to create a Stef Function. I really hate coding in JSON :-) This would have likely made my life less painful..#2021-06-2611:43steffanI agree that authoring Step Functions inside CloudFormation templates is no fun 😓#2021-06-2612:02Karol WójcikThere is AWS SAM which should help much with state functions still though you have to use json ;(#2021-06-2816:00futuroI'm so excited to see this project! I've loved using StepFunctions, and specifically I was lucky enough to use them at a company that had an (unfortunately private) library for doing exactly this, including off-loading inputs/outputs to S3 to support larger input/output sizes.#2021-06-2816:01futuroI'm currently using Argo and this library gives me hope I can switch away soon. I hope to pick this up in the next 6-12 months. Thank you!#2021-06-2711:49viestiHi! I did some small updates to cypress-clojurescript-preprocessor: https://github.com/viesti/cypress-clojurescript-preprocessor#changelog
Also added a note on how to use shared utility namespaces (so that not all code needs to be a cypress test suite): https://github.com/viesti/cypress-clojurescript-preprocessor#shared-namespaces#2021-06-2712:53viestiJust learned that Cypress has a way to execute commands from JS console, so made a hack for ClojureScript https://twitter.com/KimmoKoskinen/status/1409131358862073862#2021-06-2719:59viestiAlao, made a #cypress channel, for discussing on making Cypress work with ClojureScript#2021-06-2917:07Vincent Cantin> Call process/exit to not leave zombies when Cypress exits
That is very appreciated, thank you.#2021-06-2723:46seancorfielddepstar {:mvn/version "2.1.245"} is available: JAR builder for CLI/`deps.edn` -- https://github.com/seancorfield/depstar/releases/tag/v2.1.245 -- adds :target-dir option; AOT compilation is now done in a single process (instead of a separate process for each namespace); some pretty big internal refactoring in preparation for the upcoming tools.build release (so pom.xml handling, AOT, and JAR building can be available as separate tasks); follow-up in #depstar (for specific Qs) or #tools-deps (for more general CLI/`deps.edn` Qs).#2021-06-2805:09AndrosTadam Web Framework now has a Twitter account where it will be posting progress and news.: https://twitter.com/TadamWeb#2021-06-3016:01jacekschaeI have been :male-technologist: working hard on a new 🎥 course -- it’s all about Datomic Cloud including Datomic dev-local, Datalog, Ions, and aws deployment. If you are into this kind of thing check out the website and sing up to be notified :hugging_face: https://learndatomic.com#2021-07-0114:23ericdalloHello clojurians!
clojure-lsp Released https://clojure-lsp.github.io/clojure-lsp/ with fixes and exciting new features, clojure-lsp is not a editor only tool anymore, it has its own API and CLI 🎉
It's possible now to run clojure-lsp via terminal telling to clean all ns forms of your project, removing unused vars, sorting required/refers/imports 🚀
For more information, check #lsp.#2021-07-0114:33borkdudeExcellent, I can now deprecate carve? :)#2021-07-0114:35ericdallohahah I expect carve to have a better configurability ATM, but it's easy to improve on clojure-lsp 🙂
carve seems a valid another approach not using the LSP protocol so having both options sounds good for community 😄#2021-07-0114:35ericdalloAlso, not sure all features carve provide, if all of them are alreday included in the clean-ns refactoring#2021-07-0114:35borkdudeDoes clojure-lsp also offer a REPL API?#2021-07-0114:36ericdalloYes @U04V15CAJ with that release, the clojure-lsp.api should provide those features 🙂
https://clojure-lsp.github.io/clojure-lsp/api/#2021-07-0115:02rafaeldelboniThis is quite cool! For some reason I need to do this clojure-lsp -p ./ clean-ns to manage the clean-ns work in my repos, is that intended?#2021-07-0115:04ericdallothe default of the -p flag is the current dir, what error you were getting @UMMMKKADU?#2021-07-0115:05rafaeldelbonino errors, is just not doing anything#2021-07-0115:06rafaeldelboniI use zsh btw#2021-07-0115:08ericdalloit's correct, it have no namespaces to clean 😅 Maybe a Cleaned! print is missing 🙂#2021-07-0115:09rafaeldelbonihahaa#2021-07-0115:09ericdalloit will print the namespace cleaned only if it needs to clean anything#2021-07-0115:09ericdalloyou can confirm that, adding a unused var or sorting differently#2021-07-0115:10rafaeldelboniyeah it only shows up when I use -p#2021-07-0115:10rafaeldelboniinstead it just prints 0ms#2021-07-0115:11rafaeldelbonibut this is such a good tool, thanks a lot
https://github.com/parenthesin/microservice-boilerplate/pull/13/files#2021-07-0115:11rafaeldelbonihaha#2021-07-0115:12ericdalloThanks! will investigate further more soon your project issue#2021-07-0115:13borkdudePerhaps it's related to not having an .lsp/config.edn ?#2021-07-0115:15rafaeldelboniI do have only an ~/.lsp/config.edn and just the ./clj-kondo/config.edn at projects level#2021-07-0115:15borkdudeyes, I meant the project level#2021-07-0115:15borkdudecould be related, dunno. I think it should be optional#2021-07-0115:16ericdalloI don't think so, it probably some issue with the -p default value, in this case (io/file (System/getProperty "user.dir"))#2021-07-0115:17rafaeldelboniI copied my personal .lsp/config.edn at project level and still having the same behaviour#2021-07-0115:19ericdalloyeah, it's not related with the config#2021-07-0115:22rafaeldelboniWant me to open a issue?#2021-07-0115:59ericdalloSure!#2021-07-0116:36rafaeldelbonihttps://github.com/clojure-lsp/clojure-lsp/issues/463#2021-07-0118:50borkdude@UKFSJSM38 Sorry to interrupt your release Eric, but I don't think your recent commits fixed anything :)#2021-07-0118:50borkdudeThe problem is that you are capturing values at build time#2021-07-0118:51borkdude(System/getProperty "user.dir") should work, but not when you put it in a top level def#2021-07-0118:51borkdudeThis is because static initializers are initialized at build time in graalvm native image with the --initialize-at-build-time option#2021-07-0118:52ericdalloHum, it makes sense, but I tested with the @UMMMKKADU project, let me double check#2021-07-0118:52borkdudePerhaps your commit fixed something because the path is relative now, but this is the real reason it was broken#2021-07-0118:53borkdudeI guess the commits do work, but I was surprised you were still using top level defs, which is probably not a good idea#2021-07-0118:53ericdalloyou are right, it's missing running it in a function, or using default-fn instead of default#2021-07-0118:54borkdudeI mean for storing values that can be different over systems#2021-07-0118:54ericdalloyeah, it's probably a good idea I change that cli-options to be a function#2021-07-0118:54borkdudeThe CLI options are alright, but the defaults should just be handled dynamically, probably not using tools.cli itself#2021-07-0118:55borkdudejust using or in the main function or so#2021-07-0118:55ericdallowhy it's a problem handling in tools.cli if that cli-options would be a function?#2021-07-0118:56borkdudethat works too#2021-07-0118:57ericdalloalright, I'll improve that to be a function, thanks for the heads up 🙂#2021-07-0118:58borkdudea delay works too#2021-07-0118:59ericdalloyes, but I think changing
:default (io/file "")
to
:default-fn #(io/file "")
is enough#2021-07-0118:59ericdallowhat is best, change to that ☝️ or change cli-optiosn to be a function?#2021-07-0119:00borkdudeoh I didn't know you vould provide a function for :default-fn, yeah that works too#2021-07-0119:00ericdalloyeah, that looks better 🙂 I just need to remember for every new option facepalm#2021-07-0119:01borkdudemaybe make a note ;)#2021-07-0120:22ericdalloReleased the fix!#2021-07-0121:13JonasHey all! I've been working in the last weeks on a https://github.com/sauercrowd/clojureflare to make it easy to use Clojurescript with Cloudflare workers
It's super experimental right now, but four lines are enough to get your worker up and running! Check it out
(ns new-worker.core
(:require [clojureflare.core :as clfl]))
(clfl/worker
(clfl/route "GET" "/worker" "hello from my worker"))
#2021-07-0121:21JonasA full walk-through is available in https://github.com/sauercrowd/clojureflare/tree/main/example-worker#2021-07-0214:36oliycarmine-streams 0.1.3 has just been released 🎉
• fixes an edge case when a consumer's pending message has been deleted from the stream
• adds a utility to clear pending messages from a group or particular consumer
carmine-streams is a library that sits on top of carmine to provide a nicer api for working with redis streams
https://github.com/oliyh/carmine-streams#2021-07-0216:21borkdudeMade a native CLI to execute Specter expressions on EDN from stdin.
https://github.com/borkdude/specter-cli
Mostly because of the challenge to make Specter work with SCI, but if this turns out to be useful, I'm willing to provide pre-built binaries. Lemme know!
EDIT: now with pre-built binaries for macOS and linux
$ echo '{:a {:aa 1} :b {:ba -1 :bb 2}}' | ./specter -e '(transform [MAP-VALS MAP-VALS] inc ?)'
{:a {:aa 2}, :b {:ba 0, :bb 3}}#2021-07-0216:36natemaybe a babashka pod?#2021-07-0216:36borkdudecertainly possible#2021-07-0313:56borkdudeI now provided pre-built binaries for linux and macos:
https://github.com/borkdude/specter-cli/releases#2021-07-0220:04Michaël SalihiPing CRM full stack Clojure/Script SPA online demo support now server-side rendering: https://inertia.prestance-design.com/
It use a light Nodejs Express back end + Inertia written in ClojureScript: https://github.com/prestancedesign/pingcrm-clojure/blob/ssr/src/cljs/pingcrm/ssr.cljs
It's in early state but the "Inertia stack" can now be use for app whose performance & SEO is very important.#2021-07-0520:29Michaël Salihi@U11SJ6Q0K Because we talked about SSR together, a little ping to let you know that this is done if you curious about it.#2021-07-0604:24tatutnice, I'll check it out#2021-07-0220:06Michaël SalihiP.S. For the curious checkout the ssr branch of the repo: https://github.com/prestancedesign/pingcrm-clojure/tree/ssr#2021-07-0405:46wilkerlucio[com.wsscode/transito "2021.07.04"] is out! This is a small new library to simplify basic usages of Transit (AKA: not having to create Java Buffer classes to do simple string encode/decode of transit). That and another few other goodies, find out more at https://github.com/wilkerlucio/transito#2021-07-0423:21tony.kayFulcro 3.5 is on Clojars. https://github.com/fulcrologic/fulcro
The primary goals of this release were to separate as much of the logic from React as possible, and to improve the React Hooks support. This involved a lot of code motion, but only a small number of very rarely used vars could not be aliased back to their original location. This means there is the potential for a breaking change, but if your code uses those vars it will fail to compile, and the fix is trivial.
There are also some improvements to the APIs for form state support, dynamic routing, and UI state machines.
See the Git commit log for details.#2021-07-0509:37dgb23Does the logic separation imply that you want to be able to support multiple rendering backends other than react or is it more about being able to express things in the fulcro way at a deeper level?#2021-07-0511:46Björn Ebbinghaus@U01EFUL1A8M There was someone in the fulcro channel who experimented with a javaFX and a console renderer.
Have a look here:
https://github.com/phronmophobic/membrane-fulcro#2021-07-0512:26Björn Ebbinghaus@U01EFUL1A8M There is even a video from Tony Kay himself about using re-frame to render and Fulcro for state management.
https://www.youtube.com/watch?v=ng-wxe0PBEg#2021-07-0515:33AleedIs there a part of documentation on using Fulcro state management facilities without UI components?
from looking at table of contents it seems to still be intermingled, also since defsc is in fulcro.components namespace makes it seem like it includes built-in React/DOM components#2021-07-0515:34tony.kayAt the moment only docstrings in c.f.f.raw.components and c.f.f.raw.application. Only so many hours in the day.#2021-07-0521:26Aleeddidn’t realize there was a nested c.f.f.raw namespace (the membrane-fulcro example above must be from a previous iteration)
thanks for pointing that out, will glance at docstrings#2021-07-1108:23tony.kayJust added a chapter as well https://book.fulcrologic.com/#_fulcro_raw_version_3_5#2021-07-0423:22tony.kayThere are also a number of minor improvements to the various RAD libraries. See their commit histories if interested.#2021-07-0604:41wilkerlucio[com.wsscode/pathom "2.4.0"] is out at Clojars https://clojars.org/com.wsscode/pathom
This release adds to parsers the support for the boundary interface from Pathom 3 (https://pathom3.wsscode.com/docs/eql#boundary-interface). Besides the utility of the feature itself, it's going to be required for a new entity editor data feature that I'll be landing in Pathom Viz soon.#2021-07-0610:11oxalorg (Mitesh)Since 4clojure is shutting down, I built "4ever-clojure": a completely static version of it which runs using cljs + sci.
It interprets the code in the browser itself. 🙏 (Thanks to @borkdude for sci + giving me the idea)
It's live at: http://4clojure.oxal.org
Suggestions / Issues / PRs welcome: https://github.com/oxalorg/4ever-clojure 😊
New problems can be directly added via a PR 🚀#2021-07-0613:20AppleTry problem 3. Says 'uppercase' not allowed?#2021-07-0613:20ApplePerhaps display feedback in a div than a modal dialog?#2021-07-0613:25oxalorg (Mitesh)Yup there are a few issues with platform specific code which won't work reliably in cljs. Fortunately there's a way to patch these specific issues using sci, will look into it 🙂#2021-07-0613:30raspasovThis is very nice!#2021-07-0613:30raspasovPerhaps even makes sense to update Problem 3 with something like https://clojuredocs.org/clojure.string/upper-case#2021-07-0613:30raspasov(if supported in SCI, not sure)#2021-07-0613:42borkdudeclojure.string is in SCI by default. there is also a way to enable all JS interop#2021-07-0613:43borkdude(was uppercase about JS interop?)#2021-07-0613:53borkdude@U013MQC5YKD https://github.com/oxalorg/4ever-clojure/pull/1#2021-07-0613:53borkdudeI haven't tested locally, since there were no instructions of how to run locally ;)#2021-07-0613:58oxalorg (Mitesh)Adding instructions now! If you are using emacs+cider, you only need to cider-jack-in-cljs and a server should open up on localhost:8000#2021-07-0613:58borkdudeI just want to compile the CLJS locally, I don't need a REPL#2021-07-0613:59borkdudebut I'll try#2021-07-0613:59borkdudeI usually don't use jack-in since I can't follow what's happening with all those magically injected deps#2021-07-0613:59oxalorg (Mitesh)After doing npm install once, you can npx shadow-cljs watch :my-build#2021-07-0614:00borkdudeAlso I don't like the dev process to be a child process of emacs#2021-07-0614:02borkdudeyeah, this is what I needed:
https://clojurians.slack.com/archives/C06MAR553/p1625579996453000?thread_ts=1625566296.443000&cid=C06MAR553#2021-07-0614:19borkdude@U013MQC5YKD Not sure what this is:
https://plausible.io/js/plausible.js net::ERR_BLOCKED_BY_CLIENT
but my adblocker blocked it.#2021-07-0614:22borkdude@U013MQC5YKD OK, I think PR is ready for merge.
1) allow all JS interop
2) fix React key warnings
3) update .gitignore#2021-07-0616:15oxalorg (Mitesh)nyantocat Awesome!! Plausible is an open source analytics tool 🙂
I've updated the readme with dev instructions, and merged your PR 😁 Thanks!#2021-07-0712:50Azzuritenice 🙂 needs a <noscript> tag 🙂#2021-07-0722:36eggsyntax@U013MQC5YKD thanks so much for doing this! 4clojure was a big part of my own Clojure learning process, and I’m thrilled that it can continue helping clj/s newcomers in the future.#2021-07-0806:45oxalorg (Mitesh)Thank you @U077BEWNQ , I’m super grateful to the clojure community and just doing my small bit 🙌🙂#2021-07-0806:51borkdude@U013MQC5YKD https://github.com/oxalorg/4ever-clojure/issues/2#issuecomment-876178662#2021-07-0806:54oxalorg (Mitesh)I was sure that I did deploy after your merge, I guess not 🙈On it now 👍#2021-07-0614:33alekczFriends, the first version of PCP is out `0.0.1` 🎉
PCP: Clojure Processor is almost a drop-in replacement for php-fpm behind nginx.
Like php it allows for multiple different sites to be hosted on the same VPS with the endpoints being derived from the directory structure.
Best of all you get to write Clojure (thanks to #sci). It's still relatively new, but can easily withstand ~100 req/s on $5 droplet.
Please give it a whirl and lemme know what you think. I'd love some feedback.
You can learn more about it here: https://github.com/alekcz/pcp
Special thanks to @bruno and @borkdude for the support and guidance in the journey so far.#2021-07-0620:03hlshipcom.walmartlabs/lacinia-pedestal 0.16.1
lacinia-pedestal adds support for accessing Lacinia GraphQL as an HTTP endpoint
GitHub repo: https://github.com/walmartlabs/lacinia-pedestal
Documentation: https://lacinia-pedestal.readthedocs.io/en/latest/
Featured changes in 0.16.1:
- Updated the version of the packaged GraphiQL; this included adding the request headers editor#2021-07-0710:05henryw374new library tools.jvm for getting data about goings-on in the jvm, as data.
https://github.com/henryw374/tools.jvm#2021-07-0807:43borkdudeSCI, a Clojure(Script) interpreter suitable for scripting and Clojure DSLs, powering #babashka, scittle and various other projects, just got a new release: v0.2.6
Read the release notes here:
https://github.com/borkdude/sci/blob/master/CHANGELOG.md#v026
Join #sci to follow up with questions.#2021-07-0811:43vlaaadvlaaad/remote-repl {:mvn/version "1.2.9"} is released. https://github.com/vlaaad/remote-repl is a REPL client allowing you to start a REPL from your REPL that connects to another remote REPL server.
This version adds new functionality: https://github.com/vlaaad/remote-repl/#reconnecting on socket exceptions.#2021-07-0811:46imreAny chance this reconnect will make it into the remote-prepl functionality of reveal?#2021-07-0811:48imreOr is it already there but undocumented?#2021-07-0812:04vlaaadIt's not there, reveal does not depend on remote-repl.#2021-07-0812:07vlaaadI surely understand why it's needed, reconnecting here and there all the time is frustrating#2021-07-0812:07vlaaadI added it to my todo list 🙂#2021-07-0812:08imrethanks#2021-07-0814:35Azzuritelet's put a REPL inside my REPL so I can REPL while I REPL#2021-07-0815:02dgb23REPL all the way down!#2021-07-0817:13metasoarous#2021-07-0913:53Lucy WangSounds pretty useful! Is there a way to change the prompt when connected to a remote repl (like the chroot prefix in bash prompt)#2021-07-0917:04vlaaad@UP90Q48J3 The prompt is displayed by the remote REPL you are connecting to, this library only manages streams over wire, so it depends on the REPL you are connecting to#2021-07-0814:29nate sirehappy birth day @seancorfield#2021-07-0814:36otfromis this a new release or a number divisible by 10? If not doesn't it really belong in #releases? 😉#2021-07-0814:44emil0rI wish we could get bug fixes and improvements, just like software#2021-07-0817:07seancorfieldI appreciate the sentiment but this is not appropriate for #announcements#2021-07-0817:08seancorfield(and it was yesterday -- 7/7 -- and I'm 59 for anyone keeping score 🙂 )#2021-07-0818:11borkdudeAt least you won't confuse anyone about the month/day order with this birth date. Congrats!#2021-07-0819:23agigaoWell, I see what was happening - Happy Birthday Sean! 🎉#2021-07-0901:23val_waeselynckHa, look at that, we have the same birthday @seancorfield. I turned 30 on the 7/7#2021-07-0901:24seancorfieldCool! Happy (belated) birthday to you too @U06GS6P1N#2021-07-0912:46bruno.bonacciJust released: μ/log - v0.8.0
with a number of bug fixes and improvements:
μ/log (Pronounced: /mjuːlog/) is a micro-logging library that logs events and data, not words!
https://github.com/BrunoBonacci/mulog#2021-07-0916:46jerger_at_ddaWe just released https://gitlab.com/yogthos/mastodon-bot v1.13.6
Bringing improved output and improved error & timeout handling
https://social.meissa-gmbh.de/tags/mastodon https://social.meissa-gmbh.de/tags/twitter https://social.meissa-gmbh.de/tags/mastodon-bot#2021-07-0917:16Michaël SalihiJust released Inertia-clojure - v0.2.3 https://github.com/prestancedesign/inertia-clojure:
• Explicit mime type for HTTP response to fix issue when deploying on services like AWS Api gateway, etc
• Refactor examples to use new createInertiaApp helper
• Fix wrong page redirect after hot reloading
• Bump dependencies#2021-07-0917:27Alex Miller (Clojure team)Happy to announce a pre-release of the Clojure CLI 1.10.3.905 and tools.build - read lots more here: https://clojure.org/news/2021/07/09/source-libs-builds
This is being provided for feedback and tire-kicking and there will likely be more changes before it becomes a release.
Notably if you have been following the pre-releases, we've temporarily removed the multi-function execution support.#2021-07-0917:58Adam HelinsFellow hackers, lately I have been using this zen way of managing my private monorepos, here it is now in the open: https://github.com/helins/maestro.clj
Monorepos are often hard and besides Polylith, there aren't many great solutions. But Polylith, while great for some purposes, was too opiniated for my endaveours. This solution simply uses Deps aliases with a hint of Babashka magic. I find the result to be very flexible and amenable.
I hope you'll find if useful. This a preview as well, so feedback and PRs welcome :)#2021-07-0919:10oxalorg (Mitesh)This is super interesting! Babashka glues in so well babashka. Once you know it's power you can really see that it's the missing piece to solve a lot of problems 🙌#2021-07-0919:12borkdudeAt work we generate deps.edns from a base deps.edn (using babashka) which fills in the versions so we're using the same version of every lib in every project#2021-07-0919:20nnicholsMy job uses Bazel for the caching/orchestration/querying, but defers to babashka for most of the “doing”#2021-07-0920:22Adam Helins@U04V15CAJ I've tried having one deps.edn per project and tried to make things super local but I encountered 2 problems: a) classpath for transitive local dependencies was getting really messy, Deps can't pick up distant changes ; b) very spaghetti-like, hard to maintain a clear overview, get a sense of what is requiring what.
Don't you have that kind of issues?#2021-07-0920:25borkdude@UCFG3SDFV The overview comes from the generated deps.edns: what you see is what you get, it's no different than when you would have written the deps.edn manually. Same for local/root I think?#2021-07-0920:26borkdudeNot saying one approach is better than the other, just sharing what we did. I still have to digest what your project is exactly doing, but it seems like an interesting approach#2021-07-1010:12Adam HelinsYup, just trying to better understand. So each projects gets its own deps.edn file, right?
Suppose your monorepo has 3 internal libs that depend on each other using :local/root: A -> B -> C. You are working on A. If you modify deps.edn of B to add a dependency for instance, I think you are good. But if you modify deps.edn of C (a transitive local dependency needed by A), then Deps can't detect it. You enter a cycle where you have to manually force recompute the classpath and even that might not be enough.
I don't know if that applies to your setup?
@U04V70XH6 I think I read about something like that on your blog but can't quite remember it#2021-07-1010:13borkdudeYes, this is a problem of deps.edn in general and not of my setup specifically I think#2021-07-1010:15Adam HelinsSo that's why I've been asking about using clojure on a user specified dir in BB, but ended up avoiding that and settled on a global deps.edn at the root of the monorepo. Then you never get that kind of problems and it just works.#2021-07-1010:23borkdudethat's a nice side effect#2021-07-1010:23borkdudeor design effect ;)#2021-07-1018:34seancorfield@UCFG3SDFV multiple posts about this on http://corfield.org#2021-07-1004:11wilkerlucio[com.wsscode/pathom3 "2021.07.10-alpha"] is out at Clojars https://clojars.org/com.wsscode/pathom3
This is the first jar release of Pathom 3, the project is reaching a initial feature complete phase and these versions will help tracking the progress from now on! Updates on recent works will come soon in the next edition of Pathom updates. If you new to Pathom 3, check the docsite https://pathom3.wsscode.com/#2021-07-1101:43mauricio.szaboThis is AMAZING! Good news!#2021-07-1106:42jmayaalvThank you Wilker for all the amazing work. We went live friday with our first app running pathom3 and it's an absolute pleasure to use it. Great work!#2021-07-1113:42pezCalva 2.0.204 just out. With these changes:
• https://github.com/BetterThanTomorrow/calva/issues/1224
• Fix: https://github.com/BetterThanTomorrow/calva/issues/1228
• Workaround: https://github.com/BetterThanTomorrow/calva/issues/610
The change in the formatter for comment forms got me to restructure the Calva docs some to collect things related to Calva’s Rich Comments support on a page of its own, where I also try to make the case for the workflow: https://calva.io/rich-comments/ Feedback very welcome, as replies here, or in #calva. Happy coding! ❤️#2021-07-1113:52pezPlease also see our Merch page,. There is better availability of the We do it With Rich Comments t-shirt since a few days: https://calva.io/merch/#2021-07-1114:33emil0rKinda missed opportunity to have the tag line say Rich comments#2021-07-1114:36pezWhich tag line?#2021-07-1114:41emil0rwe do it with rich comments#2021-07-1121:47wilkerlucioPathom Viz 2021.7.11 is out! The biggest highlight of this release is the new Entity Data field. Now you can send initial data start the Pathom process. Pathom uses your index to auto-complete possible keywords there, and the query editor auto-complete is also based on the context of the data provided in the new entity data field! This feature is compatible with both Pathom 2 and 3 (requires Pathom 2.4.0+ for Pathom 2). If you are using the Pathom connector make you upgrade it to the version 2021.07.04.
You can download this release at https://github.com/wilkerlucio/pathom-viz/releases/tag/v2021.7.11
If you are in the latest, you can restart the app and it will update automatically.
Other changes:
- Support Pathom 3 Indexes directly
- Query History fix trash icon position
- Query History fix appending after overflow
- Add from URL autofocus on input on dialog open
- Allow display of empty query history
- Display error indicators on query editor and entity editor#2021-07-1217:05vemvEastwood https://github.com/jonase/eastwood/blob/master/changes.md (+ previous releases)
New features and multiple bugfixes are offered so that the default experience is buttery-smooth.
Today, more than ever, you can run Eastwood in CI with minimal to no config and get useful, unique insights and no false positives, no exceptions, and no faults unrelated to your codebase (as it used to happen due to macroexpansions).
Enjoy!#2021-07-1321:32uochanJust released antq ver 0.16.0, Tool to point out your outdated dependencies.
https://github.com/liquidz/antq
Gradle is supported experimentally!#2021-07-1421:47borkdudeBabashka 0.5.0 🎉
A native, batteries included scripting environment for Clojure with fast startup.
- Added clojure.tools.logging + timbre as the built-in logging libraries!
- Source compat with clojure.data.json and replikativ/hasch!
- Support for more clojure.pprint functions like formatter-out!
- Update Selmer with << macro!
- Various other fixes and improvements
Full changelogs: https://github.com/babashka/babashka/blob/master/CHANGELOG.md
Hop by in #babashka for more info.#2021-07-1904:58didibusWhat logger implementation is it using for clojure.tools.logging ?#2021-07-1905:06didibusNvermind: Add clojure.tools.logging with taoensso.timbre as the default implementation
Didn't know trimbre could be used as an implementation for tools.logging#2021-07-1501:58HuahaiDatalevin 0.4.40 is released. A simple durable Datalog database with a native command line shell. Thanks to @denik, this release adds the feature of transactable entities, among other developer convenience functions. https://github.com/juji-io/datalevin#2021-07-1503:05wilkerlucio[com.wsscode/pathom-viz-connector "2021.07.15-1"] is out! This version improves the error handling for connections and prepare for the new strict mode coming to Pathom 3 https://github.com/wilkerlucio/pathom-viz-connector
Full changelogs: https://github.com/wilkerlucio/pathom-viz-connector/blob/master/CHANGELOG.md#2021-07-1618:37Alex Miller (Clojure team)https://github.com/cognitect-labs/test-runner v0.4.0 is now available:
• Improved code to avoid testing namespaces without active tests - thanks Mathieu Lirzin!#2021-07-1619:26borkdudeI love it when an improvement yields less code#2021-07-1619:45Alex Miller (Clojure team)#winning#2021-07-1708:23practicalli-johnhttps://github.com/practicalli/clojure-deps-edn user level aliases for community tools and rich developer workflows. Monthly library updates and minor readme improvements, including updated details on using the unofficial approach of hotloading of libraries
Additional: all aliases not have explicit versions for the dependencies they include, removing all RELEASE version placeholders
Updates include:
• Cognitect Labs test runner v0.4.0 (latest sha)
• GitHub actions setup-clj-kondo - 2021-06-18
• borkdude/carve - latest sha
• bhauman/figwheel-main - 0.2.13
• com.github.seancorfield/clj-new - 1.1.321 (new name and version)
• com.github.seancorfield/depstar - 2.1.267
• com.github.seancorfield/next.jdbc - 1.2.674
• djblue/portal - 0.12.0
• org.clojure/tools.deps.graph - 1.0.63
• vlaaad/reveal - 1.3.212
:test/eftest and test/eftest-sequential aliases will be deprecated as I havent been able to improve the hack I used to get them working and they do not cleanly exit in some circumstances#2021-07-1715:27seancorfieldRe: clj-new -- in case anyone is curious about the "new name" comment: several of my projects have been published (and documented) under the "new" com.github.seancorfield group since the beginning of March (1.1.264 for clj-new) but I also double-published them under the old seancorfield group. As of July, I stopped double-publishing all of my projects, figuring four months of fairly regular releases was a reasonable migration period.#2021-07-1819:00JakubI created an example of building terminal UI (TUI) with Clojure and native bindings to https://notcurses.com/, a modern library with advanced graphics support (different from ncurses, check out the video on their homepage to see what terminals are capable of). It includes a compilation step with GraalVM native-image to produce an excutable binary with instant startup time: https://github.com/dundalek/notcurses-clojure-example#2021-07-1821:44ribeloI would give a lot for something like rs-tui or termui for clojure....#2021-07-1907:48JakubThat would be the next step, I think we can build some higher level widgets in Clojure on top of Notcurses, which will handle the lower-level tricky terminal bits.#2021-07-1911:10ribeloOnce it gets to the point where I understand what's going on, I'm in.#2021-07-1917:39borkdudeProbably @U7RJTCH6J has some ideas here as well, as he has a UI framework which abstracts reagent, lanterna (similar thing), etc.#2021-07-1918:23phronmophobicI have a demo of running a todo app terminal ui, https://github.com/phronmophobic/terminal-todo-mvc
There are also examples using https://github.com/phronmophobic/membrane-re-frame-example and https://github.com/phronmophobic/membrane-fulcro for state management.
Currently, lanterna is used for "graphics", and events, but it wouldn't be too hard to add another backend based on notcurses. That might be useful if notcurses makes it easy to draw certain elements like graphs.
Fwiw, cljs has https://github.com/eccentric-j/cljs-tui-template. I haven't used it, but it looks pretty good.#2021-07-1918:31phronmophobic#2021-07-1921:27JakubPreviously I tried react-blessed and react ink, but I found some limitations and also it would be nice to have something with react-like interface that works in Clojure proper. Membrane looks really cool, from a quick glance it looks exactly what I was looking for, will definitely give it a try.#2021-07-1921:33phronmophobic:thumbsup: . if you run into any issues or have questions, feel free to ask in #membrane#2021-07-1922:11ribeloI also used react-blesed and got disappointed, now I basically forked ink and write most things myself from scratch in cljs. However I would still prefer to use clj instead of cljs.#2021-07-2009:07borkdude@U70QD18NP Perhaps I should try to learn some Zig, it looks useful.#2021-07-2020:39Jakub@U0BBFDED7 yeah, react-blessed being a wrapper over imperative library it has bunch of issues that surface out. ink is much nicer, more in line with modern react, simpler and better layout support using flexbox. The issue with ink is that it does not support layering (no modal windows), does not support labels on boxes and glitches with newer unicode versions.#2021-07-2020:44Jakub@U04V15CAJ I can recommend it, Zig is a nice tool to have in a toolbelt. For me it covers the remaining use cases that are not covered by clj, cljs, and babashka. It is also a pretty small and simple language, most of it can be learnt in one afternoon.#2021-07-2020:46ribelo@U70QD18NP I don't need layering, although I'd probably be happy if there was. I added the labels to myself and would be happy to do a PR if @vadimdemedes is interested, which he probably won't be. Regarding the glitches, commits were merged yesterday that seem to fix it. I think it was even your commits if I remember correctly.#2021-07-2020:47borkdude@U70QD18NP Can you show me any fun Zig projects I can hack and play with, besides your notcurses project?
I did do some Rust programming, but Zig sounds really cool as well. Perhaps I can make a babashka pod with it.#2021-07-2020:48ribeloBy the way, I'm really rooting for https://github.com/dundalek/liz, although I haven't had a chance to use it yet.#2021-07-2020:50Jakub@U0BBFDED7 I am currently working on a project using ink so I made a PR to fix the most glaring bug. But there are more subtle ones, which I am not sure if they are fixable withhout a major rewrite.#2021-07-2020:52borkdudewhat's ink again?#2021-07-2020:52ribelohttps://github.com/vadimdemedes/ink#2021-07-2020:53ribelovery bad name to find and even the black belt in google fu does not help#2021-07-2020:55JakubI have some examples in the section https://github.com/dundalek/liz#examples which include both Liz and Zig source, last year I did some advent of code with it, thanks to low level speed was able to brute force a solution instead of coming up with proper algo 🙂#2021-07-2020:56JakubAlso if you have some lower level project i a drawer perhaps using some C library or OS syscals it might be a good fit. Zig has seamless interop with C like Clojure interops with Java.#2021-07-2020:58ribelozig looks very good, like something between rust and c. The problem is that it is very young and there is no ecosystem around it yet#2021-07-2020:59phronmophobicClojure's interop with C is pretty good with clojure-jna and/or dtype-next#2021-07-2020:59phronmophobicsome c libraries are easier to wrap than java!#2021-07-2021:00ribelo@U7RJTCH6J Is there an example on the web of how to use this?#2021-07-2021:01phronmophobichttps://github.com/Chouser/clojure-jna/
https://github.com/cnuernber/dtype-next/
https://github.com/cnuernber/avclj
https://github.com/phronmophobic/clj-cef#2021-07-2021:01phronmophobicthere's probably more#2021-07-2021:02borkdudeJNA isn't compatible with GraalVM tho#2021-07-2021:02phronmophobicbut dtype-next is#2021-07-2021:02borkdudeyep#2021-07-2021:02borkdudeThis blog is also informative: https://yyhh.org/blog/2021/02/writing-c-code-in-javaclojure-graalvm-specific-programming/#2021-07-2021:03JakubI also have some experiments writing JNI bindings in Liz which should be graal compatible, I can try clean it up and publish.#2021-07-2112:50borkdudeexciting#2021-07-1820:04Asko NōmmI started developing a block-based WYSIWYG editor in CLJS (for use within JavaScript and CLJS projects) called Blocko: https://github.com/askonomm/blocko. The idea is to create something similar to what WordPress Gutenberg editor is, albeit a lot simpler. It’s currently in a 0.1 with a lot of things still pending to do, but it does work and I’m quite excited about it - and how surprisingly easy it is to build something like that with Clojure.#2021-07-1901:44rutledgepaulvI created a small ring middleware library for content-encoding negotiation. It supports gzip/deflate natively and brotli with an extra (unbundled) dependency. I was interested in supporting compression without spawning an additional thread per-request like some of the other libraries in the ecosystem that do gzipping. Cheers! https://github.com/RutledgePaulV/ring-compression#2021-07-2002:08wilkerlucio[com.wsscode/pathom3 "2021.07.19-alpha"] is out! https://clojars.org/com.wsscode/pathom3
This release is a big change to Pathom 3, now it uses strict mode by default, on first sight this will make error handling much simpler for initial users. To use the old tolerant way you can use the new lenient mode. Details about this strict/lenient error modes at https://pathom3.wsscode.com/docs/error-handling/ (There were many docs updates to align with the new strict mode by default). Full changelogs at https://github.com/wilkerlucio/pathom3/blob/master/CHANGELOG.md#20210719-alpha#2021-07-2121:56pezPlease say hello to Rich 4Clojure https://github.com/PEZ/rich4clojure It is a “copy” of 4Clojure meant to be used from the editor REPL, encouraging a Rich Comments workflow. I mean, even with the original web based version, I am sure many did what I did, brought it to the editor and hacked on it there. We might as well start there. It is where Clojure code is crafted, right? For sharing of solutions I am using Github gists. Please give it some spins and me some feedback. I know there are some things broken in the translation, and will fix things as I get to know about them.#2021-07-2214:04val_waeselynckHappy to announce Clojure Sustainability Works, a sub-community for 'sustainability-oriented' Clojure projects and programmers find each other, and collaborate fruitfully.
Please provide feedback in threaded comments, or directly in the ClojureVerse post.
https://clojureverse.org/t/clojure-sustainability-works-is-launched/7897#2021-07-2214:05val_waeselynckI hope it's OK to announce it in this Slack channel - arguably it counts as a project#2021-07-2214:06eggsyntaxOpen source sustainability? Environmental sustainability? Could perhaps use clarification 😁
> I hope it's OK to announce it in this Slack channel - arguably it counts as a project
Seems ok to me 🙂#2021-07-2214:07val_waeselynck@U077BEWNQ mostly environmental - it's clarified here on ClojureVerse: https://clojureverse.org/t/about-the-csw-companies-category/7492#what-qualifies-as-sustainability-oriented-work-1#2021-07-2214:07val_waeselynckBut thanks for raising the clarity issue#2021-07-2214:09eggsyntaxAwesome project!#2021-07-2308:10oliyI'm pleased to announce the 0.1.17 release of martian, the http abstraction for Clojure/Script.
Define http calls as data, or bootstrap from OpenAPI/Swagger, and call them like functions!
https://github.com/oliyh/martian
This release adds support for:
• martian-hato - support for the https://github.com/gnarroway/hato http client for JVM 11+
This release improves:
• Application of defaults https://github.com/oliyh/martian/issues/108
This release fixes:
• Parameter aliases being confused between body, query, path etc https://github.com/oliyh/martian/issues/109
This release changes:
• The clojars group - this and future releases are now under `com.github.oliyh`, see README for details
#2021-07-2713:32chrisnAnnouncing a https://github.com/cnuernber/tmdjs that includes what I think is the most crucial subset of the dtype-next and tmd apis. This may help those of you trying to bridge server/client pathways with data science workflows and it definitely will help anyone dealing with timeseries data on the client or react-native.
The implementation here is much more minimal, about 1/3 the size because the underlying javascript vm doesn't support primitive types like the java vm does so I avoided reams of macro code and interface declarations and such. So in a lot of ways this version is a lot more 'pure' than the desktop jvm version :-).
Try it out and let me know what you think 🙂.#2021-07-2714:18martinklepschCitrus v3.3.0 has been released with a backwards compatible “escape hatch” allowing you to change Citrus’ default behavior quite significantly. We’ve been using it to pass the entire application state to controller methods among other things.
https://cljdoc.org/d/clj-commons/citrus/3.3.0/doc/changelog#2021-07-2714:48wilkerlucio[com.wsscode/pathom3 "2021.07.27-alpha"] is out! 🎉
- Support disable input destructuring validation on pco/resolver with the flag ::pco/disable-validate-input-destructuring?
- Run ::pco/transform before running the resolver validations
- Fixed bug when combining batch + disabled cache + missing outputs doing infinite loops
- Add p.eql/process-one and p.a.eql/process-one helpers
Full changelog at https://github.com/wilkerlucio/pathom3/blob/master/CHANGELOG.md#2021-07-2802:26mauricio.szaboJust published a new version of my library check (https://gitlab.com/mauricioszabo/check). it's basically a library to allow for better testing - it wraps nubank/matcher-combinators and expectations for matchers, allow the user to define "custom matchers", and have a better support for mocks. It's been battle tested for more than a year, by testing Chlorine, Clover, and multiple projects that I've been working in ClojureScript.
But when it really shines, for me, is on asynchronous testing for ClojureScript - it adds the ability to mock async elements, adds a timeout for a test, and teardown. It also does not "fight" against clojure.test, but on the contrary, it embraces it (so tools like kaocha, devcards, workspaces keep working correctly). Discussions on... #testing channel, maybe?#2021-07-2802:35eggsyntaxLooks like a nicely designed hybrid!#2021-07-2802:38seancorfieldThe syntax reminds me of Midje (unfortunately). I wondered if you had looked at https://github.com/clojure-expectations/clojure-test ?#2021-07-2802:39seancorfield(right now it only works with self-hosted cljs via Planck but I would love to have it work with more general cljs!)#2021-07-2803:05mauricio.szaboThere's also a clojure-test-like syntax like:
(check (=> 3 (+ 1 2)))
#2021-07-2803:15mauricio.szaboAnd yes, I looked at this version of expectations and I want to bring its matchers to check. The reason I didn't use it was mostly because I focused this last version on getting the async tests right - that's something that's really weak on ClojureScript IMHO.#2021-07-2811:06borkdudeClj-kondo is back with a brand new feature: macroexpansion (and some other improvements) ✨!
https://github.com/clj-kondo/clj-kondo/blob/master/doc/hooks.md#macroexpand
This is available in the just released version 2021.07.28!
Changelogs: https://github.com/clj-kondo/clj-kondo/blob/master/CHANGELOG.md#20210728
Enjoy. clj-kondo#2021-07-2821:01Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.10.3.933 is now available. Changes since last stable release:
• deps.edn
◦ https://clojure.org/reference/deps_and_cli#_git
• If a git library name follows the repo convention names, the :git/url can now be inferred (`:git/url` can also be specified explicitly and takes precedence)
• :git/tag and prefix :git/sha can now be specified instead of the full sha. Both must point to the same commit.
◦ :sha has been renamed to :git/sha but the original is still supported for backwards compatibility
◦ :deps/prep-lib - a new top-level key can be used to say how a source lib should be prepared before being added to the classpath. This key’s value is a map with :alias, :fn, and :ensures. See https://clojure.org/reference/deps_and_cli#prep for more info.
◦ :tools/usage - a new top-level key can be used to provide the :ns-default and :ns-aliases context for a tool
• https://clojure.org/reference/deps_and_cli#tool_install - git-based programs that can be installed with a local name. Tools can provide their own usage context in deps.edn.
◦ Added new auto-installed tool named tools with https://clojure.github.io/tools.tools install, list, remove. See https://clojure.org/reference/deps_and_cli#tool_install#.
◦ Install a tool with clojure -Ttools install <lib> <coord> :as <toolname>
◦ Run a tool with clojure -T<toolname> fn (also takes -X style args)
• https://clojure.org/reference/deps_and_cli
◦ New -T option is like -X (executes a function) but does not use the project classpath, instead uses tool classpath (and adds :paths ["."] by default). -T:aliases is otherwise same as -X. -Ttoolname resolves named tool by name and uses that tool lib.
◦ https://clojure.atlassian.net/browse/TDEPS-198 - -X and -T will not wait to exit if futures/agents have been used
◦ https://clojure.atlassian.net/browse/TDEPS-182 - Improve deprecation messages to be more accurate
◦ https://clojure.atlassian.net/browse/TDEPS-183 - Fix -Sdescribe output to be valid EDN on Windows
◦ https://clojure.atlassian.net/browse/TDEPS-179 - Fix incorrect classpath when :classpath-overrides removes path
◦ Delay computation of local-repo path (don’t compute at load time)
◦ Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.12.1003
• New -X:deps programs:
◦ find-versions - to find versions of Maven or git libs or tools
◦ prep - use to https://clojure.org/reference/deps_and_cli#prep source libs
◦ help/dir - to list available functions in a tool namespace
◦ help/doc - to list docs for a tool namespace or function#2021-07-2906:18orestisDoes :git/sha need to be the full one, if :git/tag is present, or could a short one be used (as mentioned in the clojureD presentation?)#2021-07-2913:17Alex Miller (Clojure team)if both, then short#2021-07-2921:14Michaël SalihiWhat a great release! Thanks!#2021-07-2822:09Alex Miller (Clojure team)tools.build {:git/tag "v0.1.7" :git/sha "8a3abc2"} is now available
• TBUILD-10 - fix missing assertions in tests
• Remove unnecessary resource file that overrides tools.deps#2021-07-3016:15jarohen#crux 1.18.0 is out 🚀
* Significant improvements to the Lucene module.
* Ability to add 'secondary indices' (of which Lucene is the first) - custom indices that follow the Crux tx-log alongside the main indices. Can be used (for example) to create materialized views of your Crux transactions in other formats/stores - we're intrigued to see how folks use this 🙂
* First alpha release of crux-corda - adds the Corda blockchain (https://corda.net) as a possible source of Crux transactions, allowing you to query both the current and historical state of your Corda nodes using Crux's temporal queries.
* All the usual bugfixes 🐛
For more details, see the release notes at https://github.com/juxt/crux/releases/tag/1.18.0.
As always, a big thanks to everyone contributing to this release by raising/fixing issues, and helping us with repros!#2021-07-3019:44chrisnhttps://github.com/cnuernber/avclj, a small library built directly on top of ffmpeg using it's C bindings, is up on clojars and now supports both encoding and https://cnuernber.github.io/avclj/avclj.html#var-make-video-decoder.
Enjoy :-)#2021-07-3100:56chrisnThanks :-)#2021-08-0319:10blak3mill3rVery cool, I played with it when you first released it and I'm looking forward to using it for realz#2021-07-3115:35borkdudeReleased the first version of nbb (not babashka, it's Node.js babashka!?) to npm.
See https://github.com/borkdude/nbb for usage and installation details. If you want to chat about it, join #nbb for details.#2021-07-3119:42AndrosI share a small script for me that generates from RSS feeds a nice newspaper. https://github.com/tanrax/RSSPAPER#2021-07-3121:03cp4nThat's cool. Would make a nice browser landing page.#2021-08-0609:11AndrosIt's a good idea! It's not a big effort and I can bring it closer to other people.#2021-08-0116:21vemvEastwood 0.9.6 + https://github.com/jonase/eastwood/blob/Release-0.9.6/changes.md
Featuring a few new linters: :reflection and :boxed-math (the latter disabled by default). :non-dynamic-earmuffs has been re-enabled as well.
You can learn about the reflection linter's rationale and advantages https://github.com/jonase/eastwood/tree/Release-0.9.6#reflection. It's quite an improvement over, say, touching dynamic vars globally/repeatedly and then grepping for them.
Enjoy!#2021-08-0116:53borkdudeI would mention #graalvm compatibility as a significant benefit of getting rid of reflection warnings as well#2021-08-0116:55borkdude(graalvm native-image to be precise)#2021-08-0204:32ambrosebsTyped Clojure 1.0.17: enhanced error messages--destructuring is now a first-class concept!
Old: Polymorphic static method clojure.lang.RT/nth could not be applied to arguments
New: The type (t/HSet #{:foo}) cannot be destructured via syntax [a]
#core-typed
https://www.patreon.com/posts/54411134#2021-08-0215:07tengstrand#polylith v0.2.0-alpha10
I’m proud to announce that the poly tool now suports the latest version of tools.deps.alpha!
This https://github.com/polyfy/polylith/releases/tag/v0.2.0-alpha10 is a milestone which includes several improvements.
The https://github.com/polyfy/polylith can be found here. Happy coding!#2021-08-0219:37kwladykanew library https://github.com/kwladyka/consistency-clj
TL; DR;
You are interested in if
1) you use google cloud and really interested in if you use google cloud run.
2) you want to learn how to make ring-wrappers for logs, especially with reading :body and you don’t know about (.reset ^java.io.ByteArrayInputStream body). Or just want to use my wrappers.
1)
Google jsonPayload (https://cloud.google.com/logging/docs/agent/logging/configuration#process-payload) for google cloud run (https://cloud.google.com/run / https://cloud.google.com/run/docs/logging#using-json) and not only.
It also works with https://cloud.google.com/error-reporting/docs/ without any change.
In other words it is the simplest and most efficient solution for google cloud run when you want to keep your infrastructure simple and use google native solutions for logging and error reporting.
2)
rings wrappers for logging: request, response, exceptions
PS library is not only about logging. I have plan to push there code which I share across projects which I develop, but feel free to use it.#2021-08-0306:34viestiHi! Out of curiosity, I created a nRepl server for nodejs using https://github.com/borkdude/sci: https://github.com/viesti/nrepl-cljs-sci.
You can find it in npm (`"nrepl-cljs-sci": "0.0.11")` for use as npm dependency, possibly for adding to a JS project. It's also available for CLJS projects on clojars (`org.clojars.viesti/nrepl-cljs-sci {:mvn/version "0.0.11"}` , see the https://github.com/viesti/nrepl-cljs-sci/tree/main/example/cljs since a bit modified SCI is required for now :)). Basic eval and load-file ops should work :) Happy network repling :)#2021-08-0309:57pezVery cool! I’m thinking a bit about what it would take to make this server work with Calva. Today Calva assumes a Clojure nREPL server, which might mainly be a UI thing, but I’m not sure. Do you have some use cases in mind for this? Maybe that would help me wrap my mind around the problem.#2021-08-0310:58viestiI did some hacks to please Cider so that I can make a CLJ cider connection 🙂#2021-08-0311:14pezYes, I can make a CLJ cider connection from Calva. But it is a bit confusing. 😃#2021-08-0311:34viestiCider differentiates cljs and clj buffers, and a I found out that a cljs file cannot be loaded into a CLJ repl, the there's example to use a .cljc file 🙂#2021-08-0311:35viestidon't know if Calva has same limitation 🙂#2021-08-0311:43pezIt’s funny, but Calva has the exact same limitation. I don’t know why, but maybe the idea about a CLJS nREPL server was too crazy to even consider.#2021-08-0313:58ericdalloclojure-lsp Released clojure-lsp https://github.com/clojure-lsp/clojure-lsp/releases/tag/2021.08.03-13.33.03 with awesome news 🎉
I'd like to thank you @borkdude for the help on #babashka and #clj-kondo side making it possible to clojure-lsp now understands babashka projects/scripts 🚀 From now on, clojure-lsp will make available completion, rename, find-references and all features you already know work great with bb as well babashka
Another huge improvement/refactor on this release is how clojure-lsp lint public unused vars, we now use a new feature from clj-kondo called `custom-lint-fn` where it's possible to "create" its own linter but using clj-kondo features, giving the possibility to ignore this linter via code 🎉 Also this improves performance and open other possibilities to other clojure-lsp features 👀
For more information and details, check #lsp clojure-lsp#2021-08-0315:28lilactownFYI the LSP emoji is unreadable on dark mode and I wasn't sure what this announcement was about until I hovered over the parens at the beginning 😛#2021-08-0315:41ericdalloThanks, I actually forgot to add clojure-lsp after the released facepalm and slack doesn't allow me to edit the message anymore#2021-08-0315:42ericdalloOh, managed to edit :)#2021-08-0318:41alpox#2021-08-0417:56lispycloudsAnnouncing the very first release of contajners: https://github.com/lispyclouds/contajners 😄 😄
This is the spiritual successor of clj-docker-client(https://github.com/into-docker/clj-docker-client), the clojure client for docker; now supporting not just docker but podman(https://podman.io/) and hopefully more OCI container engines too!!
This is a radical simplification and rethought of the design and the way the APIs are interacted with, hopefully providing a simpler and more efficient access to container engines with a very very data driven and REPL friendly approach!
Status is still *Alpha* some of the rough edges being worked upon and some more of testing, specially with Podman is underway.
Hope this is of use to you folks and testing, feedback and improvements are highly sought after and appreciated! 😄#2021-08-0417:57lispycloudsfollow up in #docker#2021-08-0418:07imreLove the name#2021-08-0419:38dominicmOoh. Is this using the docker-compatible API that podman exposes? Or did you have to do something extra to add support?#2021-08-0419:58lispyclouds@U09LZR36F that was the original plan but it seems its sort of compatible. A lot of POST bodies felt different to me and not so great docs. So bit the bullet and did a proper impl to support them both properly, bootstrapping from their Swagger 2.0 YAML specs 😄#2021-08-0419:59lispycloudsThe new design is in a way that its simpler to add in support for more engines later on too. Also took the chance to fix some perf and design mistakes made in clj-docker-client 😅#2021-08-0420:58blueberryNew release of Neanderthal, the Clojure high performance Matrix and Linear Algebra library with CPU and GPU support. 0.42.0 is out!
https://github.com/uncomplicate/neanderthal
http://neanderthal.uncomplicate.org#2021-08-0510:31pezNew Calva-version out. v2.0.206 brings:
• https://github.com/BetterThanTomorrow/calva/issues/1248 – From now on Calva will default to using the latest release of #lsp, reset the setting calva.clojureLspVersion, if you have been using it, to enable the default. See https://calva.io/clojure-lsp/ for some (little) more info on this.
• Performance improvement https://github.com/BetterThanTomorrow/calva/issues/942 – Tons of thanks to @brdloush for spearheading the identification, fixing and testing of the performance bottleneck! ❤️ #2021-08-0602:31Cam SaulAnnouncing the initial release of a new fast and extensible whitespace linter. Checks files for trailing whitespace, tabs, files that don't end in newlines, files that end in blank lines, Unicode characters that look maddeningly similar to ASCII ones, and invisible Unicode characters. Written in Clojure but you can use it to check any sort of text file.
https://github.com/camsaul/whitespace-linter
(Currently Clojure CLI only)
At Metabase we used to use Bikeshed to check (some) of these things, but we recently transitioned from Leiningen to the Clojure CLI so we were without a replacement for a bit (AFAIK Bikeshed doesn't support the Clojure CLI). I'm sure there are other tools out there that could check these things for you (maybe not all of them), but I wanted to wrap my head around writing -T commands, so it seemed like a good excuse to write another linter.#2021-08-0606:49jerger_at_ddaWe've done first steps on reimplementing mastodon-bot (https://gitlab.com/yogthos/mastodon-bot/-/merge_requests/14) on clojure/jvm. Mainly because on jvm we can choose, when to go async.
Feels quite good & we improved rss-input validation on our way using spec
If anyone want's to join our jorney, pls. dm
https://social.meissa-gmbh.de/tags/clojure https://social.meissa-gmbh.de/tags/mastodon#2021-08-0720:42Michaël SalihiI just discovered htmx https://htmx.org/ from a clojureverse post.
Since I play a bit with it and I redone the classic SPA todo app with Babashka.
An SPA without writing one line of JS and less than 10kb gzipped directly from Babashka!
Here the repo for who is interested:
https://github.com/prestancedesign/babashka-htmx-todoapp#2021-08-0721:02refsetThanks for sharing this, it's very neat! I also looked at your somewhat related Inertia.js/PingCRM stuff recently - what are your feelings about this approach relative to that stack so far?#2021-08-0721:51lukaszI'm working on an internal app built with hiccup and https://unpoly.com - somewhat similar concept and works great in practice#2021-08-0722:15dgb23Is this a typo?
https://github.com/prestancedesign/babashka-htmx-todoapp/blob/master/htmx_todoapp.clj#L141#2021-08-0807:53Jakub Holý (HolyJak)In the Readme, extendable should perhaps be extensible?#2021-08-0914:37Michaël Salihi@U01EFUL1A8M Thanks for pointing me out. The missing space is not interpreted but definitely a typo, yes.
@U0522TWDA This text is quoted from the official htmx website https://htmx.org/ so I don't know. English isn't my first language, but it seems "extendable" exists right?#2021-08-0914:42dgb23both “extendable” and “extensible” are completely fine, the slightly more precise term would be “extensible”, but they are largely interchangeable.
https://english.stackexchange.com/questions/90426/extensible-vs-extendible#2021-08-0914:46Michaël Salihi@U0JEFEZH6 I didn't know a "unpoly", so thank you! It seems very interesting, I'll definitely play with it soon! :-)#2021-08-0915:13Michaël Salihi@U899JBRPF Thanks!
I will say while both are alternative propositions but do not have the same objective of abstraction.
Htmx allows not to write a single line of JS (although it is possible to write a backend in Node.js 🙂) while with Inertia.js,
it is necessary to have a base with one of the following JS front-end frameworks (or "React" "Vue" "Svelte").
When we know and do not rule out the use of these, I would say that the approach of Inertia.js is more direct.
The front-end is easy to write because it acts much as a template and everything that is routing, state management, auth, etc. will be done
back-end side as writing a classic application. This will require little adaptation for a back-end profile having notions of front for example.
With Htmx, there will be a little more to learn and the approach seems less obvious at the beginning with the advantage of being much lighter.
I spent a lot more time in Inertia.js documentation than in Htmx so my opinion is certainly a bit biased at the moment.
I hope that answers your question.#2021-08-0916:09dgb23htmx seems to be brutally simple and it takes the HTTP REST / HATEOAS approach very seriously, which is I think a good thing if you buy into the model.
Also, it’s always going to be faster and more lightweight to directly inject HTML fragments instead of parsing JSON/EDN, then constructing a VDOM and then rendering the HTML.
I think the limits are clear: As soon as you add forms and interactive elements with reactive states, you don’t want to make round-trips. The server typically also doesn’t need to know about the specific UI state you’re in at any given time.
I like htmx! And I’m looking forward to explore it’s limitations, uses and how to solve problems that it doesn’t solve well.#2021-08-0813:51Chris McCormickHey all, @borkdude suggested I announce the retro-computing aesthetics Twitter bot I just finished building. It's built with nbb (which was a joy to build with for this project).
Here's the announce Tweet where you can find a link to the bot ("c64core") and to the nbb/cljs source code: https://twitter.com/mccrmx/status/1424354480619810817
Enjoy!#2021-08-0817:01ikitommiWe are happy to announce [metosin/malli "0.6.0"], a summer vacation edition. Malli is a complete validation and specification library for Clojure/Script. The release has the following changes:
• new tools to instrument function values and schematized vars
• new repl/development tools to watch function registry emitting clj-kondo & instrumentation on changes (clj only)
• optional fipp-based pretty printer for runtime (function schema) errors
• support for var-metadata based function schemas - annotate your code without dependencies to malli
• proper function schema guide: https://cljdoc.org/d/metosin/malli/CURRENT/doc/function-schemas
• robust humanized errors - error forms are derived from the first error, fixes all reported bugs
• much faster collection validation and transformation, kudos to @ben.sless 🚀
• new malli->plantuml schema transformer
• lot’s of small improvements
• small breaking changes, check CHANGELOG for details.
Big thanks to all contributors and testers! If you are interested in using or developing malli, join #malli
https://github.com/metosin/malli/blob/master/CHANGELOG.md#060-2021-08-08
The new dev-tooling in action:#2021-08-0901:49djblueJust released portal https://github.com/djblue/portal/releases/tag/0.13.0. No new features, mainly performance improvements. Portal is a data inspector / visualization tool that hopefully makes it easier to explore new and unfamiliar data models. It can be used as a https://djblue.github.io/portal/ tool or https://github.com/djblue/portal#usage in your process.#2021-08-0902:08ericdalloAmazing tool!#2021-08-0916:47fogus (Clojure Team)New Cognitect Labs aws-api service APIs available!
CHANGES
new AWS service APIs available (services version v811.2.958 and v813.2.963): Route53 Recovery Cluster, AWS Route53 Recovery Control Config, AWS Route53 Recovery Readiness, Amazon Chime SDK Identity, and Amazon Chime SDK Messaging
README: https://github.com/cognitect-labs/aws-api/
API Docs: https://cognitect-labs.github.io/aws-api/
Changelog: https://github.com/cognitect-labs/aws-api/blob/master/CHANGES.md
Upgrade Notes: https://github.com/cognitect-labs/aws-api/blob/master/UPGRADE.md
Latest Releases of api, endpoints, and all services: https://github.com/cognitect-labs/aws-api/blob/master/latest-releases.edn#2021-08-1215:19Matthew Davidson (kingmob)@U050WRF8X Any plans to support AWS SDK v2? Some newer services aren’t available in v1, like TranscribeStreaming.#2021-08-2018:34fogus (Clojure Team)Hi! Sorry that it took a while to get back to you. While I am supporting the project I only have one day a week allocated to it. At the moment we only use the endpoints.json file from the Java SDK for the list of services. However, on the services API side we use the JS SDK. Was there something from the JS SDK that you found lacking?#2021-08-1010:56Bobbi Towershttps://twitter.com/porkostomus/status/1425040365850034181?s=19 Like "sound-of-sorting" this produces visualizations and "audibilations" of sorting algorithms, but instead of synth spaceship noises it tries to render a blues bass/organ duet.#2021-08-1207:36javahippieWe published the camunda-clojure-plugin for a smoother integration of the java-based Camunda Process Engine in Clojure applications:
https://github.com/lambdaschmiede/camunda-clojure-plugin
https://clojars.org/com.lambdaschmiede/camunda-clojure-plugin#2021-08-1212:59blueberryUncomplicate libraries have been updated to support the latest CUDA 11.4 and cuDNN 8.2.2
http://neanderthal.uncomplicate.org
http://clojurecuda.uncomplicate.org
https://github.com/uncomplicate/deep-diamond#2021-08-1213:13cassielI really must play with these. Would love to hear feedback from relative newbies on the software and/or the books.#2021-08-1217:04blueberryIsn't it better to try for yourself? There's tons of free tutorials on my website https://dragan.rocks most of them are written with beginners in mind.#2021-08-1220:38tony.kayI'm working on a new library for doing backups of Datomic Cloud databases. We needed it for a compliance checkbox on business continuity, and for copying (and redacting sensitive info) databases to staging environments. The library supports doing streaming-like replication of a live database, and continuous recovery, and the recovery side can filter/modify the transaction stream.
I'm waiting on a verification from Clojars, but the Repo (with git sha access) is here: https://github.com/fulcrologic/datomic-cloud-backup
I'll be working on this in the coming days testing it out and improving it as I run into issues. The artifacts needed for the streaming are protocol-based, and there is an S3 and Redis version of them that I'll be using in my particular application of it.#2021-08-1304:46tatutthis is great! addresses a sorely missed functionality... we also made our own custom tx-log backup/restore in our app for complience (customer had to have offsite backups as files)#2021-08-1304:46tatutbut it's good to have it as a separate tool and incremental backups is a nice feature#2021-08-1309:57Jakub Holý (HolyJak)@U0CKQ19AQ I guess I am overlooking something basic, but won't https://github.com/fulcrologic/datomic-cloud-backup/blob/main/src/main/com/fulcrologic/datomic_cloud_backup/cloning.clj#L163`try` in restore-segment!
(try
(d/transact conn ...)
(log/infof "Restored...")
(catch ...))
always return nil instead of the expected {:tempids ...} due to the last expression being the log call instead of the transact call?#2021-08-1314:50tony.kayooops. yes#2021-08-1314:50tony.kayI had just added that to see progress 😊#2021-08-1311:40pezI have just updated my #cljsrn example app repo https://github.com/PEZ/rn-rf-shadow Now using latest versions of about everything: shadow-cljs, React Native, re-frame, Reagent, Expo. Also fixed some README issues, and stopped Webpack from refreshing the web app on reload (as ClojureScript coders, that kind of lame state-killing refresh is not to our taste, right?) The demo video should still be reasonably valid: https://www.youtube.com/watch?v=QsUj7HO5xDg#2021-08-1311:42pezThanks to @U8MJBRSR5 for keeping me company while working with this. 😃#2021-08-1419:41Vincent CantinFrom my perspective, you kept me company while I was working on my project :rolling_on_the_floor_laughing:#2021-08-1320:16Alex Miller (Clojure team)Clojure CLI 1.10.3.943 is now available with many perf-related improvements:
• https://clojure.atlassian.net/browse/TDEPS-199 Use default http-client in S3 transporter
• Cache S3 transporter for a repo
• Fixed session cache to work properly across threads / binding stacks for better perf
• Replace specific maven version range requests with non-range request to reduce repo metadata lookups
• Load and cache Maven settings once for perf
• Cache version range resolution results for perf
• Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.12.1019#2021-08-1321:17oliyI'm very pleased to announce my new website https://stardev.io, a place to find developers and technologies.
It's written in Clojure and uses public data from the Github API. Some fun Clojure facts include:
• There are https://stardev.io/languages/clojure
• The top rated Clojure developer in the world is https://stardev.io/developers/tonsky
• The top 5 Clojure repos are https://stardev.io/top/repos/clojure
You may also be interested to know there are https://stardev.io/top/developers/, creating between them https://stardev.io/top/repos/. The https://stardev.io/countries/ have the most developers, but there is https://stardev.io/top/developers/all/in/cook_islands who probably has the best view.
Why not find your account today and see where you stand? Rankings are available per language and location.
Hope you have fun using it, if you have any feedback it would be greatly received!#2021-08-1404:15pezVery cool! #2021-08-1415:46practicalli-johnThis is a very interesting project to investigate GitHub data. Thank you.
It also highlights some limitations of the GitHub source data and it's interpretation.
The 'top' Clojure library, Fira Code is arguably liked for being a font rather than a font conversion tool in Clojure. Although happy to be proved wrong 😁
I don't believe LightTable is very actively used these days, but it was a fascinating project of its time. I have very fond memory of it. I am curious to try it again.
And it's interesting that ClojureScript is on the top 5 but not Clojure itself.
I think the study of GitHub data and StackOverflow data sources do make for a fascinating journey into some basic data science and the challenges around data interpretation
Thanks again.#2021-08-1421:38oliyThere is a clear divide between libraries, where the end product is the code itself where the language matters (like e.g. ring) and products like FiraCode where the end product that people use and like is a binary and the language of the source is irrelevant.
There is also an accumulative, accretive effect where people are unlikely to unstar a repo that they starred in the past. Repos will not peak and decline along with their popularity in terms of stars, but rather reach their peak and then stop growing. Any new rivals will likewise have to go through their entire product cycle to end up at a similar point! It's something I've considered to try to make it more zeitgeisty is to include contribution rates, rate of stars etc and I'll think about ways to approach that. I was wondering if I could generate a radar like thoughtworks/juxt based off this.#2021-08-1503:09vemvYes partitioning by year would sound a bit more useful / reflective of reality
e.g. in 2020 $some_repo might have grown by 100 stars (from 1000) and $other_repo by 200 (from 0). $other_repo would be 'hotter' than $some_repo, even while smaller in absolute terms#2021-08-1322:13Alex Miller (Clojure team)io.github.clojure/tools.build {:git/tag "v0.1.8" :git/sha "38d2780"} is now available
• write-file - TBUILD-15 - add :string option
• write-pom - TBUILD-13 - add :scm options to write scm properties#2021-08-1413:32athosI'm happy to announce the first release of Trenchman https://github.com/athos/trenchman
Trenchman is a standalone nREPL/prepl client written in Go and heavily inspired by https://github.com/technomancy/grenchman. It connects to a running nREPL/prepl server and starts up a REPL session instantly.
Feedback is welcome!#2021-08-1413:46borkdudeAwesome!#2021-08-1413:47borkdudeAre you also aware of https://github.com/eraserhd/rep?#2021-08-1413:49borkdudeBtw, it's pretty easy to expose your binary as a babashka pod (this uses a very similar format as nREPL) so it can be used a a library from babashka. See https://github.com/babashka/pod-babashka-go-sqlite3 for an example in golang.#2021-08-1413:50borkdudee.g.
(require '[pod.athos.trenchman :as t])
(t/eval "(+ 1 2 3)" {:port 1234})
or so#2021-08-1413:51athosHi, thanks for your comments!#2021-08-1413:54athos> Are you also aware of https://github.com/eraserhd/rep?
Yeah, I know of it. Some of Trenchman's use cases overlap with it, I think.
> Btw, it's pretty easy to expose your binary as a babashka pod (this uses a very similar format as nREPL) so it can be used a a library from babashka
I'm not familiar with babashka pod, so I'll look into it later. Thanks for the suggestion! 🙏#2021-08-1414:28borkdude@U0508956F
bb nrepl-server & sleep 1 && trench -p 1667 && kill $!
This connects to a babashka nREPL server :)#2021-08-1414:28borkdudePerhaps trench can support a timeout so it keeps trying until the port is open#2021-08-1414:28borkdudeAlso some read-line-ish feature would be nice so up arrow works#2021-08-1415:00athosI'm glad to see you playing with my tool 😄
Before the timeout, perhaps trench should support connection retry?
> Also some read-line-ish feature would be nice so up arrow works
Yes, readline is a must-have feature. I'd like to support it at some point if it's not too difficult to implement. For now, I'm using the command with rlwrap, like alias trench='rlwrap trench'.#2021-08-1415:01borkdudeyes, timeout + retry#2021-08-1415:01borkdudeyou could look at how joker has implemented their REPL, I think they're using some golang library for dealing with the input#2021-08-1415:02athosAh, you're right#2021-08-1503:24athos@U8QBZBHGD Wow, thank you for picking this out! 😍#2021-08-1421:21wilkerlucio[com.wsscode.pathom3 "2021.08.14-alpha"] is out! This release includes improvements for dynamic resolvers, which is what will allow the maximal graph vision of Pathom to work! Changes:
• Fix cache store specs
• Add ::pcr/wrap-process-sequence-item plugin entry point
• Add filtered-sequence-items-plugin new built-in plugin
• Batch support for dynamic resolvers
• Batch support on foreign requests
• BREAKING CHANGE: Dynamic resolvers always get rich inputs with input data and foreign ast
• Dynamic mutations also go as input parts with params
https://clojars.org/com.wsscode/pathom3#2021-08-1518:39seancorfieldHoneySQL "2.0 Gold" -- com.github.seancorfield/honeysql {:mvn/version "2.0.783"} is available -- SQL as Clojure data structures. Build queries programmatically - even at runtime - without having to bash strings together! -- https://cljdoc.org/d/com.github.seancorfield/honeysql/2.0.783/doc/readme
• Uses different coordinates and namespaces to 1.0.x so that you can use both together and migrate on a per-query basis!
• Completely rewritten to make user-level extension much easier and to fully support PostgreSQL without needing additional libraries -- but still maintains compatibility with the data DSL from 1.0.x and most of the helpers from 1.0.x -- see https://cljdoc.org/d/com.github.seancorfield/honeysql/2.0.783/doc/differences-from-1-x for more details#2021-08-1520:23vemvKudos!
fully support PostgreSQL without needing additional libraries calls my attention. Does this refer to the revamped extension API, or I can actualy use vendor-specific syntax without extension whatsoever?
https://www.postgresql.org/docs/current/functions-array.html#ARRAY-OPERATORS-TABLE comes to mind as a would-be tricky thing#2021-08-1520:26seancorfieldBecause of Clojure's restrictions on symbols/keywords, for the @> and <@ operators, you need to define a var as an alias:
(def at> (keyword "@>"))
but you can just register that as an operator and use at> in the DSL.#2021-08-1520:27seancorfieldThe primary goal was to implement everything from the nilenso extension library out of the box and add more over time as folks need.#2021-08-1520:28seancorfield(sql/register-op! at>)
That's all that is needed to register a binary op for @>.#2021-08-1520:37vemvThanks! Looking forward to give it a spin. Pleasantly surprised by how simple it is.#2021-08-1522:37tony.kayI've done a bit of work to the datomic-cloud-backup library https://github.com/fulcrologic/datomic-cloud-backup and am up to version 0.0.5. The new version includes new support for writing backups to a local filesystem, a more general-purpose backup-segment! function, and a parallelized backup function for doing the initial backup of large databases in less time.
My preliminary tests show a backup speed in the Cloud (writing to S3 in an alternate region) of at least 40k transactions per minute. I expect that to get faster as the I/O subsystems scale due to demand.#2021-08-1604:08tony.kayHm. The parallel stuff seems to push Cloud over the DynamoDB limit and it fails. Looks like there needs to be some kind of back-off on that when that exception happens.#2021-08-1606:35steveb8nor a read speed rate-limiter to keep it under. this might be better for exporting from prod databases so that normal operations are less at risk#2021-08-1606:44djblueThe portal data inspector has a new release, 0.14.0. Some highlights are: the portal atom now works in node.js, vega-lite is a little easier to use, scroll position is preserved on navigation and general performance improvements. Checkout the https://github.com/djblue/portal/blob/master/CHANGELOG.md#0140---2021-08-15 for more details.#2021-08-1612:41pezRich 4Clojure is updated to allow for practicing Clojure using an editor-connected REPL, without installing anything. It runs Calva in the web browser, thanks to Gitpod. Read about it, and some broader Getting Started with Clojure plans of mine for this week over at ClojureVerse: https://clojureverse.org/t/practice-clojure-in-a-full-editor-based-experience-without-installing-anything/8049#2021-08-1619:31ericdalloclojure-lsp Released clojure-lsp https://github.com/clojure-lsp/clojure-lsp/releases/tag/2021.08.16-19.02.30 with a lot of fixes, minor improvements, and support for a new leiningen plugin: 🚀
Now it's possible to use clojure-lsp API features directly from lein, for example to clean your project namespaces you can configure an alias or just run:
lein clojure-lsp clean-ns
For more information, check the #lsp channel#2021-08-1710:13bozhidarIntroducing incomplete, a new simple Clojure code completion library https://metaredux.com/posts/2021/08/17/introducing-incomplete-a-simple-clojure-code-completion-library.html#2021-08-1711:06vemv⚡
what would be a use case for using incomplete but not compliment?#2021-08-1711:21bozhidarCode size limits mostly. See https://github.com/trptcolin/reply/pull/153#issuecomment-193387725#2021-08-1711:23bozhidarIt will be fairly easy to replace clojure-complete with incomplete when such remote code loading happens (which I assume is very rarely).#2021-08-1711:23bozhidarBut if someone can use compliment, they should use compliment - it's a great library.#2021-08-1711:29rickmoynihan@U051BLM8F: so is the plan to eventually replace nrepl.util.completion with this dependency?#2021-08-1711:55bozhidarNo, it's not. nREPL can't have any runtime dependencies.#2021-08-1711:56bozhidarI'll just keep the code of nrepl.util.completion and the standalone library in sync. Same as I do for https://github.com/nrepl/bencode#2021-08-1711:56rickmoynihanThat was my suspicion; thanks for clarifying#2021-08-1711:57rickmoynihanI’m guessing there’s no support for ::alias/keywords?#2021-08-1712:03bozhidar(deftest keyword-completions-test
(testing "colon prefix"
(is (set/subset? #{":doc" ":refer" ":refer-clojure"}
(set (candidates ":" *ns*)))))
(testing "unqualified keywords"
(do #{:t-key-foo :t-key-bar :t-key-baz :t-key/quux}
(is (set/subset? #{":t-key-foo" ":t-key-bar" ":t-key-baz" ":t-key/quux"}
(set (candidates ":t-key" *ns*))))))
(testing "auto-resolved unqualified keywords"
(do #{::foo ::bar ::baz}
(is (set/subset? #{":incomplete.core-test/bar" ":incomplete.core-test/baz"}
(set (candidates ":incomplete.core-test/ba" *ns*))))
(is (set/subset? #{"::bar" "::baz"}
(set (candidates "::ba" 'incomplete.core-test))))))
(testing "auto-resolved qualified keywords"
(do #{:nrepl.core/aliased-one :nrepl.core/aliased-two}
(require '[nrepl.core :as core])
(is (set/subset? #{"::core/aliased-one" "::core/aliased-two"}
(set (candidates "::core/ali" *ns*))))))
(testing "namespace aliases"
(is (set/subset? #{"::set"}
(set (candidates "::s" 'incomplete.core-test)))))
(testing "namespace aliases without namespace"
(is (empty? (candidates "::/" *ns*)))))#2021-08-1712:04bozhidarThat's the extent of the keywords support currently.#2021-08-1715:51blueberry[New release - RC4] Deep Learning for Programmers: An Interactive Tutorial with CUDA, OpenCL, DNNL, Java, and Clojure https://aiprobook.com/deep-learning-for-programmers/#2021-08-1800:05Sal TostiHey all 👋,
I recently created a web-based version of cljstyle.
It’s built with ctmx and (obviously 😉) cljstyle.
You can check it out at http://www.cljstyle.com.
(many thanks to @greg316 and whamtet)#2021-08-1809:17javahippieJust released clj-test-containers 0.5.0. It contains some fixes to the documentation, added some type hints to prevent reflection warnings and upgraded to use Testcontainers 1.16.0, which brings better support for M1 Macs, improved startup time and some fixes:
https://clojars.org/clj-test-containers#2021-08-1816:31Mathieu CorbinI released a new version of Commentator, a free commenting system for your blog/website built in Clojure.
This release brings a lot of improvements including multi website support.
Commentator stores comments on any s3-compatible store (the app itself being completely stateless and so easy to deploy) and provides functionalities like a public/admin API to manage comments, an event system, an antispam and a rate limiter...
The documentation is available at https://www.commentator.mcorbin.fr/#2021-08-1816:54pezCalva’s https://calva.io/getting-started/ is updated, taking the users much quicker to Interactive Programming (seconds), and trying to.quickly establish momentum. The easiest way to try it right now, if you are not a Calva user, is to use the zero-install option at https://github.com/PEZ/rich4clojure and expand those I am new to Clojure/Calva info panes. (I am working on a more tailored-to-the-purpose repository for this, more on that tomorrow maybe.) It would be great if some people test it and give me feedback about what works and does not work.#2021-08-1823:42seancorfieldhttps://github.com/seancorfield/deps-new -- a new, simpler way to create deps.edn projects, built on tools.build -- install (requires Clojure CLI 1.10.3.933 or later!):
clojure -Ttools install com.github.seancorfield/deps-new '{:git/tag "v0.1.0" :git/sha "089d868"}' :as new
and then create an app:
clojure -Tnew app :name myname/myapp
Feedback appreciated in #deps-new (renamed from #clj-new but I'll be supporting clj-new in there as well).#2021-08-1906:06quantisanhttps://github.com/Motiva-AI/stepwise v0.7.0 is out. Use it to coordinate asynchronous, distributed processes with AWS Step Functions managing state, branching, and retries.
New feature for v0.7.0: adds support for large payloads (beyond AWS Step Functions limit) by offloading large messages to S3 https://github.com/Motiva-AI/stepwise#offloading-large-payload-to-s3.#2021-08-1915:19ericdalloclj-kondo Announcing https://github.com/clj-kondo/lein-clj-kondo: a leiningen plugin to run clj-kondo in your project
The main difference between running clj-kondo as a deps with run -m is that it's possible to pass a --lint $classpath where the plugin will replace with the leiningen classpath of the project 🙂
For more information check the https://github.com/clj-kondo/lein-clj-kondo or ask in #clj-kondo#2021-08-1920:50pezThe first version of the Getting Started with Clojure - Zero install is just released. It is a take on the beginner experienced inspired by some of the feedback in the What do beginners struggle with? thread over at ClojureVerse. What if we focus first on the language and on getting a feel for the mode of programming Clojure offers? If we can get devs hooked on that, hopefully they are then ready to go through some loops and hoops to set up their own machines with it and get cracking with projects.
I’ve been at this for several days now and am getting a bit blind. I know there are holes in the plot, but where? Please give it a spin and give me feedback. Not sure where, but if you think your feedback fits in #calva, post it there, otherwise replies to this thread works for me. https://calva.io/get-started-with-clojure/#2021-08-1920:54pezThe setup is that ^ this ^ article gives some “what to expect?” info and has a button that spins up VS Code and Calva in your browser. VS Code automatically shows you instructions on how to fire up the Getting Started REPL, and that then starts the guides. These are really just REPL powered Clojure files.#2021-08-2008:39martinklepschGitpods seem very much like the recently-out-of-beta codespaces on GitHub itself, very cool that this type of stuff is possible now#2021-08-2008:56pezI also think it is like codespaces. Haven’t checked it out closely enough to know how similar or how different, though.#2021-08-2014:28donyormAnother possibly useful resource would be https://gitlab.com/unc-app-lab/clem-repl a project I'm working on to help new users better understand error messages (still in alpha/beta, but it is usable)#2021-08-2015:55pezIndeed, @U1C03090C. I’ve been wanting to experiment with how to integrate that in Calva since it was first announced.#2021-08-2015:56donyorm@U0ETXRFEW let me know if you would like help with that, I’m going to have a bit more bandwidth for Clem starting next week#2021-08-2015:58pezAwesome. I hope to have time!#2021-08-2409:58cyppanthat’s pretty awesome, I’m trying to setup a similar environment using github codespace, but I can’t install the calva extension on their embedded vs code, it shows me this error documentation https://code.visualstudio.com/docs/remote/codespaces#_why-is-an-extension-not-installable-in-the-browser
that’s strange :thinking_face:#2021-08-2410:12pez@U0CL38MU1 I think we would need to enable it in the extension manifest. But also, I haven’t quite gotten around to figuring out if Calva even can run in Codespaces. I’m not sure how similar to Gitpod it is, but it seems that the web based VS Code is a bit limited whereas Gitpod Code is very similar to the full VS Code. The VS Code team isn’t quite ready with the API:s and guidelines either, so maybe it will clear up soon.#2021-08-2410:55cyppanOk I didn’t know about the extension manifest, yes codespace is very recent, it misses some documentation... I’ll try to ask them through their support#2021-08-2411:03cyppan(I’ve found this vs code documentation page about remote development and codespaces https://code.visualstudio.com/api/advanced-topics/remote-extensions)#2021-08-2411:36pezPlease file an issue about it on the Calva repository about this. If there isn’t one already, but I think there isn’t.#2021-08-2018:42fogus (Clojure Team)New Cognitect Labs aws-api service APIs available!
CHANGES
new AWS service APIs available (services version v813.2.972.0): Amazon MemoryDB, AWS Snow Device Management
README: https://github.com/cognitect-labs/aws-api/
API Docs: https://cognitect-labs.github.io/aws-api/
Changelog: https://github.com/cognitect-labs/aws-api/blob/master/CHANGES.md
Upgrade Notes: https://github.com/cognitect-labs/aws-api/blob/master/UPGRADE.md
Latest Releases of api, endpoints, and all services: https://github.com/cognitect-labs/aws-api/blob/master/latest-releases.edn#2021-08-2211:44viestiHi! I put out 0.2.0 of cypress-clojurescript-preprocessor, with initial support for running a cljs repl inside the Cypress test runner via shadow-cljs: https://github.com/viesti/cypress-clojurescript-preprocessor#repl-in-cypress
Might be that there's still some rough edges, but at least it is out there for hacking now 🙂 Also, finally found a way to properly kill child processes of the preprocessor 🧟#2021-08-2223:23Vincent Cantin@U06QSF3BK The git tag 0.2.0 is missing#2021-08-2305:41viestiOops, fixed, thanks for noticing! 🙂#2021-09-0622:17mauricio.szaboWhat has been you experience using a repl in cypress? We're kinda doing the same for one of our projects, and the now API proved to be a nightmare to work with - lots of things that don't work as expected or break with cypress version bumps...#2021-09-0709:00viestiThese are the same concerns that I had in mind also, and good to know that there is someone with actual knowledge to back this up :) I have to confess that I haven't yet used the "now" command in a real project, my interest was mainly to pursue what is possible and see where it takes me :)#2021-09-0715:48mauricio.szaboYes, I had more success with not using now at all and using (-> cy .-queue .run) to "force" the running of the queue (needs newest cypress version)#2021-09-0715:49mauricio.szaboBut even then, it's quite strange... I was thinking about re-creating the facilities of Cypress over Etaoin, for example, so REPL-Driven browser driving could be a first-class thing#2021-09-0809:49viestiyeah, having good repl for browser testing would be like holy grail :) Cypress has good stuff but annoying this lack of repl, but was positively surprised that someone used the term "repl" in Cypress github issue even :) https://github.com/cypress-io/cypress/issues/8195#2021-08-2415:56borkdudenbb 0.0.50
An ad-hoc scripting tool for CLJS (SCI) on Node.js.
• load react relative to script dir when using reagent, don't depend on it directly
• support loading ESM modules: (:require ["zx$fx" :as zxfs])
• promesa module (makes working with promises more convenient)
• support cljs.pprint
• added lots of documentation and examples
https://github.com/borkdude/nbb
Follow up in #nbb.#2021-08-2418:21jerger_at_ddaOn the way to reimplement mastodon-bot on jvm we managed to get a green graal-native build - yay 🙂
https://gitlab.com/yogthos/mastodon-bot/-/merge_requests/14
Does someone knows how to get (println) outputs on graal-native (pls. pm)?
#mastodon #mastodon-bot#2021-08-2420:10borkdudeThere is a #graalvm channel for this. println should just work#2021-08-2506:57jerger_at_ddawill ask there :-)#2021-08-2609:34danielcomptonClojurists Together is funding six developers $1,500/month each for 12 months! https://www.clojuriststogether.org/news/long-term-funding-selections/
• Bozhidar Batsov
• Michiel Borkent
• Dragan Djuric
• Thomas Heller
• David Nolen
• Nikita Prokopov
More discussion in #cljtogether#2021-08-2610:32carocadHey @U051KLSJF, several of the links to the major members are broken. For example: latacora and roam. Hope it helps#2021-08-2610:34danielcomptonThanks, fixed!#2021-08-2613:07pezI think this long-term funding thing is totally awesome!#2021-08-2617:29pfeodrippeSoon we will be able to apply to Clojurists Together ternure 🙏#2021-08-2614:49carocadAfter a very long time of not working on this I am happy to take over the https://clojars.org/hiposfer/geojson.specs. Now available under https://github.com/carocad/geojson.specs#2021-08-2616:39Joshua SuskaloVersion 1.2.0 of americano has been released! This version brings a new cli function intended to allow you to use your americano build aliases in :deps/prep-lib!
https://github.com/IGJoshua/americano#2021-08-2712:52plexusWatch and hot-reload your deps.edn, so you can add (or bump) dependencies without restarting your REPL. https://github.com/lambdaisland/classpath#watch-depsedn#2021-08-2712:53plexusThis is most definitely alpha/experimental. There are some known limitations. Experience reports are very welcome!#2021-08-2712:53plexusBackground reading: https://lambdaisland.com/blog/2021-08-25-classpath-is-a-lie#2021-08-2712:53pezSounds like magic.#2021-08-2712:56plexusOh it is! Thanks to @U5H74UNSF for repeating "this is how it really should work" over and over, and to Nextjournal for partially funding this work.#2021-08-2806:10seancorfieldio.github.seancorfield/build-clj {:git/tag "v0.1.0" :git/sha "fe2d586"} -- https://github.com/seancorfield/build-clj -- Common build.clj tasks abstracted into a library!
Having implemented build.clj (and tools.build) in several of my open source projects I found there was a lot of repetition across them, so I factored out the common functionality into this library. Follow-up in #tools-build#2021-08-2820:27tengstrandpoly https://github.com/polyfy/polylith/releases/tag/v0.2.12-alpha
Fixes five issues, so please check it out! #polylith#2021-08-2907:48vemvEastwood - heavyweight linter 🥊 - https://github.com/jonase/eastwood/blob/Release-0.9.9/changes.md#changes-from-097-to-098 (+ previous releases)
This batch includes a new linter, performance improvements, new ways to selectively omit warnings, and various bugfixes. Learn more in changelog/readme.
Enjoy!#2021-08-2910:34pezThe shadow-cljs + React Native + reframe example/quick start project, rn-rf-shadow, has been updated, by @brandon.ringe gratitude ❤️ , to support EAS builds. That is Expo’s new build system that makes it easier than ever to distribute your React Native apps and update them over-the-air. See https://github.com/PEZ/rn-rf-shadow for more info.#2021-08-3013:44jacekschae🎉 Learn Datomic is OPEN for enrolment and first videos will be available 22 Sep 2021 🥳
Big thank you 🙏 to @jarrodctaylor @stuarthalloway @furkan3ayraktar @wilkerlucio @thheller for code reviews and making this course awesome ❤️
https://learndatomic.com#2021-08-3017:24furkan3ayraktarWoop woop 🙌#2021-08-3017:39tengstrandReally cool!#2021-08-3013:49jacekschaeI have been working on video courses :male-technologist: for quite some time now and a lot of people reached out and ask about different pricing models. Here is my best attempt to address that:
https://clojure.stream#2021-08-3014:00hindolYou have some of the best Clojure courses out there. But it is way too costly for a country like India. Will you consider having different prices for different countries?#2021-08-3014:08jacekschaeThe platform I use to host the videos does not provide functionality to provide discounts for specific countries.#2021-08-3119:42Kailash K👋 all, we are inviting speakers to our monthly https://www.meetup.com/Seajure/ meetup that happens first Thursday of every month. Please do let us know if anyone would be interested to give a talk or help us learn of the new cool library or project that you are working on, would love to schedule one and help make that happen:pray:#2021-09-0219:463GI am trying to work with my new team on getting some folks to speak. definitely keep me in the loop for future events 🙂#2021-09-0318:59vemvRemember to keep in mind the channel focus
Project/library announcements ONLY - use threaded replies for discussions. Do not cross post here from other channels. Consider #events or #news-and-articles for other announcements.
no big deal but yeah for next time :)#2021-09-0115:30Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.10.3.967 is now available
• Refine exec exceptions for missing namespace vs missing function in namespace
• Replace Maven-based build process with tools.build
• Compile entry points in tools.deps used for building classpaths for performance
• Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.12.1036#2021-09-0115:45imre> Replace Maven-based build process with tools.build
This is intriguing.
1. Is this the build process for the clojure cli itself?
2. If yes, is the source for the above (clojure cli + its build process) available to the public?#2021-09-0115:46Alex Miller (Clojure team)yes and yes#2021-09-0115:47Alex Miller (Clojure team)https://github.com/clojure/brew-install/blob/1.10.3/script/build.clj#2021-09-0115:49imreoh, very nice, thank you!#2021-09-0115:50Alex Miller (Clojure team)replaced a big pile of maven and bash stuff. might end up driving a few enhancements to tools.build eventually to clean up a few things, but tools.build was sufficient as is.#2021-09-0115:51imreSounds excellent, thanks for sharing. I take it that https://github.com/clojure/brew-install#package-script is now outdated?#2021-09-0115:51Alex Miller (Clojure team)yes, I'll update#2021-09-0115:51imre👍:skin-tone-3:#2021-09-0115:53borkdudeBabashka, a fast-starting native scripting runtime for Clojure, 0.6.0 is released!
Highlight:
• Add support for java.net.http. This enables raw interop for those classes and thus running the java-http-clj library from source. The raw interop is the first part of a multi-stage plan to move all http related scripting towards a java.net.http based solution in favor of the other two solutions.
To read about the other improvements and bugfixes in this release, see:
https://github.com/babashka/babashka/blob/master/CHANGELOG.md#060
For questions: #babashka
Special shout out to @grzm who did most of the work on integrating https://java.net.http.#2021-09-0214:56blueberry[BOOK] Deep Learning for Programmers 1.0.0 Released!
https://aiprobook.com/deep-learning-for-programmers/#2021-09-0215:42carocadfor those of you interested in math libraries I just released frechet v0.13.0. This is mostly a performance improvement over previous versions by using native arrays internally. Happy coding!
https://github.com/carocad/frechet#2021-09-0220:24tony.kayFulcro 3.5.3 has been released. This release includes configuration for clj-kondo, and a few tweaks to debug logging.
https://github.com/fulcrologic/fulcro#2021-09-0220:41borkdude@U0522TWDA This should probably be:
"../resources/etc"
https://github.com/fulcrologic/fulcro/blob/7103a61d630210147304d748ddaba0cc9e70f1ec/.clj-kondo/config.edn#L1#2021-09-0221:35Jakub Holý (HolyJak)Thanks, Michiel! I totally forgot about that one 😅#2021-09-0306:25Jakub Holý (HolyJak)Fixed by https://github.com/fulcrologic/fulcro/pull/485#2021-09-0220:53Alex Miller (Clojure team)Pleased to release a brand new edit of "Simple Made Easy" https://www.youtube.com/watch?v=LKtk3HCgTa8#2021-09-0220:54Alex Miller (Clojure team)re-edited from the original HD video and using Rich's original slides + transitions, so much closer to how it was originally presented#2021-09-0220:54eggsyntaxAnd here I thought you were going to say it was the dance remix 😉#2021-09-0220:58Alex Miller (Clojure team)I'll get right to work on that#2021-09-0221:22andy.fingerhutThis makes me wonder whether there might ever be "signed copies" available? 🙂#2021-09-0221:36Jakub Holý (HolyJak)NFTs? troll#2021-09-0313:57Alex Miller (Clojure team)best auto transcription miss: "dysentery" for "disentangle"#2021-09-0317:14andy.fingerhutAre you allowed to edit the auto transcription?#2021-09-0319:00Alex Miller (Clojure team)yes :)#2021-09-0319:00Alex Miller (Clojure team)I did all that before release#2021-09-0401:26seancorfieldIt was so good to watch this again! It's such a good talk!#2021-09-0314:50mariaFor those of you that aren’t on Twitter 😉, we’ve announced the 9 projects that we will be funding for Q3 2021! https://www.clojuriststogether.org/news/q3-2021-funding-announcement/
• $9,000
◦ http://shadow-cljs.org/ - Thomas Heller
◦ https://github.com/clojure-lsp/clojure-lsp - Eric Dallo
◦ https://github.com/metosin/malli - Tommi Reiman
• $2,000
◦ https://github.com/oxalorg/clojurians-log-v2 - Mitesh Shah
◦ https://github.com/alekcz/pcp - Alexander Oloo
◦ https://github.com/FieryCod/holy-lambda - Karol Wójcik
• $1,000
◦ https://github.com/dependabot/dependabot-core - Othman Azil
◦ https://github.com/clojure/core.typed - Ambrose Bonnaire-Sergeant
◦ https://github.com/polyfy/polylith - Joakim Tengstrand#2021-09-0315:21oxalorg (Mitesh)Huge congrats to everyone! And super thanks to the Clojurists Together clojurists-together committee and entire #clojure community for making this happen so consistently and smoothly! clojure-spin bananadance nyantocat#2021-09-0321:57uochanJust released antq ver 1.0.0, Tool to point out your outdated dependencies.
https://github.com/liquidz/antq
IMPORTANT: Dropped support for Clojure 1.8.0 from this version.
See below to use antq with Clojure 1.8.0 or earlier.
https://github.com/liquidz/antq/blob/main/doc/clojure-1.8.adoc#2021-09-0419:57Matthew Davidson (kingmob)Manifold 0.1.9 is now out, boasting a long list of bug fixes and a few minor improvements. Many thanks to everyone involved. https://github.com/clj-commons/manifold/blob/master/CHANGES.md#2021-09-0420:20borkdudeI'm very pleased to see that this project has been revived, thank you @U10EC98F5#2021-09-0420:20Matthew Davidson (kingmob)np, just trying to be a good shepherd#2021-09-0420:21borkdudegratitude#2021-09-0421:29nhaLikewise! I like manifold and do not plan on moving away from it 🙂#2021-09-0421:30borkdudewe're also using it at work via yada#2021-09-0503:22Matthew Davidson (kingmob)Thx for clj-kondo, btw. Love it!#2021-09-0508:57plexusThe first release of witchcraft-plugin is out, which adds Clojure support (nREPL + deps.edn) to Minecraft. This complements the Witchcraft library, which provides an idiomatic Clojure API for REPL-driven interactive creative coding in Minecraft. https://github.com/lambdaisland/witchcraft-plugin#readme#2021-09-0508:59plexusFor people who've seen my previous videos the big difference here is that instead of running minecraft (Glowstone) inside Clojure, here we're running Clojure inside Minecraft, which makes it a bit easier to set up with other servers like Spigot or Paper, and hopefully lowers the learning curve for people coming in from the Minecraft community.#2021-09-0509:01plexusLittle technical detail that may interest some people, here's some (somewhat hacky but functional) code for renaming Java classes in an uberjar so they don't clash (i.e. "shading"), used from a tools.build task. https://github.com/lambdaisland/witchcraft-plugin/blob/main/build_plugin.clj#L45-L64#2021-09-0805:05robert-stuttafordthis is so frickin COOL!#2021-09-0708:48plexusNew release of lambdaisland/fetch, a wrapper around js/fetch with content negotiation.
[lambdaisland/fetch "1.0.41"]
{lambdaisland/fetch {:mvn/version "1.0.41"}}
• Add support for all remaining js/fetch options (notably :headers)
• Add support for x-www-form-urlencoded request encoding
• Breaking: treat a string :body as literal, don't (re-)encode it
https://github.com/lambdaisland/fetch#2021-09-0800:00HuahaiDatalevin 0.5.3 is out. This is a major release that introduces transparent client/server mode of using Datalevin databases. The server supports full fledged role-based access control (RBAC). A brief documentation for the Datalevin client/server is at https://github.com/juji-io/datalevin/blob/master/doc/server.md#2021-09-0809:13henryw374New library, js-literal , provides a cljs reader literal #j/s which is like the #js literal, but is recursive.
https://github.com/henryw374/js-literal
largely built to satisfy some curiosity... maybe something like this exists already but didn't find it.
Example `
#j/s [:a {:b [:c]}]
; compiles to => Array.of("a",Object.fromEntries(Array.of(Array.of("b",Array.of("c")))));
; under advanced compilation, compiles to ["a",Object.fromEntries([["b",["c"]]])]
; if you can improve on the above, IOW object literal syntax, please PR
#2021-09-0809:17borkdudeprobably an obvious question, but why not just use clj->js ?#2021-09-0809:18henryw374yeah I should address that in the readme... clj->js should be equivalent, but will be less efficient, going via cljs datastructures#2021-09-0809:19henryw374so this is kind of in between clj->js and using #js all the way down#2021-09-0809:19imrelove the reader tag#2021-09-0809:20henryw374😉#2021-09-0809:21borkdude@U051B9FU1 interesting. I had an issue in SCI around #js: I accidentally made it behave recursively and I didn't realize that, even though it's a reader function, also I learned that CLJS will still evaluate to new objects all the time, e.g. in (apply identical? (for [i [1 2 3]] #js {:a 1})), this will yield false#2021-09-0809:58mkvlrj/lit in https://github.com/applied-science/js-interop does a similar thing#2021-09-0810:26henryw374interesting @U5H74UNSF, that macro will produce more efficient js, ie with object literals. Possibly they could have a reader function with the same content I believe and so have a tagged literal like #j/s that produces optimal js code... hmm#2021-09-0810:45henryw374suggested that https://github.com/applied-science/js-interop/issues/28#2021-09-0813:35refsetCrux has been renamed to XTDB, and there are https://github.com/xtdb/xtdb/releases/tag/1.19.0-beta1 available for testing with the fully-renamed APIs, to check everything has gone smoothly (no functionality changes this time). New Twitter account & blog post here: https://twitter.com/xtdb_com/status/1435593730921218058
The Slack channel has migrated to #xtdb already.#2021-09-0813:42mpenetanother 4 letter project name with an X, the tradition was respected I see :)#2021-09-0815:19richiardiandreaI like it!#2021-09-0819:36Bobbi TowersThe #exercism Clojure track has launched brand-new "Concept exercises" in a beta stage: https://exercism.org/tracks/clojure/concepts
This is the result of a 2 year (mostly volunteer) effort to provide a better learning path on Exercism. What once was a largely haphazard collection of challenges is being revamped into a proper syllabus that navigates the student through the graph of core Clojure concepts, with a new in-browser editor with automated testing.
This is very exciting and a bit terrifying for me, because it's the first thing I've written that is used in this scale of production. I'm sure there are lots of bugs, hugely embarrassing ones even, so I welcome your reports and any other feedback that could help improve the tooling and/or educational content.#2021-09-0820:38Bobbi TowersOh that's interesting... I'll report that to the team 😅#2021-09-0820:44p-himikIt's just an implicit offering to become a jack of all trades. :)#2021-09-0820:48Bobbi TowersThat's not actually a 0, it's a Mobius Strip that has been unraveled, representing the endless cycle of knowledge#2021-09-0914:49ChaseGreat endeavor! Thanks for doing this. I think it will be a great resource to guide beginners to. But one thing I would suggest is to add a project.clj file (or maybe deps.edn I guess but I would stay consistent with the rest of the non concept track Clojure problems) so folks can work on it locally with repl driven development, including running the tests.#2021-09-0915:05ChaseAhh, in looking at the github it looks like you have added a deps.edn file to all the concept exercises except the first one (lucian's luscious lasagna)#2021-09-0916:52metasoarousLook like the 0 thing is fixed, but what about these missing icons?#2021-09-0917:29metasoarousHmm... after signing up didn't see this any more#2021-09-0917:30metasoarousinstead just collapsed all of those containers#2021-09-0917:32metasoarousAlso... not able to start any of the excercises. They seem to be locked?#2021-09-0917:34metasoarousOh; I see. It's because I didn't complete "Hello world". But that's a little odd, because from the sylabus it looks like I should start by clicking "Basics", but then can't complete any excercises.#2021-09-0917:34metasoarousShouldn't hello world either be first in the syllabus, or part of basics?#2021-09-0917:36metasoarousNext, after completing the hello world exercise, I see this:#2021-09-0917:39metasoarousHuh; After clicking around a bit, that box was replaced with one that let me mark it as complete.#2021-09-0917:40metasoarousAnyway, going through lasagna now; This is pretty sweet! Great work!#2021-09-0917:41metasoarousIf I were to make any suggestions, other than smoothing out the friction above, I'd suggest an option for parinfer, and more robust autocomplete that incorporates local variable names.#2021-09-0917:42metasoarousRegardless, this is a wonderful resource; Thanks for working on this!#2021-09-0917:44metasoarousOh... now, it shows little locks for the other entries on the syllabus:#2021-09-1007:52jerger_at_ddaToday we released our dda-k8s-crate. A software to provision production ready mini k8s clusters.
We updated version of all used components.
https://github.com/DomainDrivenArchitecture/dda-k8s-crate/releases/tag/1.2.0
As we are going to drop pallet support this will be one oft the last releases. We will continue work in our provs-line. The new k8s setup will be k3s and kotlin based.#2021-09-1020:23Mark WardleDear all, not sure how many health IT clojurists there are, and some (but not all) of this work is UK specific, but I’ve been quietly working on a suite of core libraries and services using clojure. If anyone is interested, you are welcome to try them out. I’d also welcome feedback, and testing (e.g hermes with non-UK editions of SNOMED)
hermes - https://github.com/wardle/hermes - open source SNOMED terminology library and microservice. Use for autocompletion and logic tests.
dmd - https://github.com/wardle/dmd - the UK medicines and devices dataset - composes nicely with hermes to supplement the UK edition with concrete prescribing data
clods - https://github.com/wardle/clods - UK health and care organisations including geographic mapping (useful for health related GIS)
nhspd - https://github.com/wardle/nhspd - lightweight wrapper around the UK postcode directory - essentially geographic data for every postal code
deprivare - https://github.com/wardle/deprivare - early work on socioeconomic deprivation indices / ranking - useful for analytics
There are more, but these are the most re-usable. Clojure, and the libraries I’ve used - including datalevin, pathom, instaparse - have made this work productive and fun! Thank you all.#2021-09-1020:29schmeeeven though I’m not in the health field at all, I’ve been looking a lot at the code of these applications recently, especially Hermes. I think they are excellent examples of “real” Clojure applications, the kind that is rarely open sourced 👏 Kudos and thanks for making this available! 😄#2021-09-1020:41Mark WardleThanks that’s very kind! Immutability and functional / flows of data make so much sense in health and care so unclear why so many health apps are so stateful!#2021-09-1020:59ghadifellow previous Health IT clojurist here. Nice job!#2021-09-1021:35borkdudeI'm in the health IT, thanks for sharing your work#2021-09-1021:37Adam HelinsDear friends, this week was a very special one and it is hard containing the excitement. We launched the alpha version of Convex, the first decentralized Lisp in the world. And it looks very much like Clojure: https://convex.world/
It is essentially a worldwide Lisp machine, censorship-resistant, with an immutable and decentralized database anyone can join. A very energy efficient one, modeled around Clojure-like constructs. You'll recognize straightaway the datastructures you love and a transaction language looking strangely familiar.#2021-09-1022:06javahippieCongratulations on the alpha launch 🙂 For me the “Try it now” button on your page is broken (MacOS on Safari & Chrome).#2021-09-1023:04R.A. PorterSkimming through, you have an error on the https://convex.world/cvm/basic-syntax page. (I was worried it wasn't an error at first, but a weird implementation; I tested and confirmed it works as expected).
(+ 2) ;; 4
should, of course, be
(+ 2) ;; 2#2021-09-1107:32Adam Helins@U0N9SJHCH Hmmm, it's just a link and no one else reported it as broken. You could try again and DM me please? Thanks#2021-09-1112:36R.A. PorterDocumentation error. I was skimming, not running your samples in the sandbox REPL, and the comment at the end of this line is, as you can see, wrong.#2021-09-1208:24Adam Helins@U01GXCWSRMW Thanks, will be fixed in next deploy! What do you think about the rest of the doc? Quite a few topics, always challenging to explain. Feedback welcome!#2021-09-1213:35R.A. PorterThey're quite good. Lots of breadth and good examples. 👍#2021-09-1021:37Adam HelinsAnd since Convex is built on the JVM, here is a fine selection of first-class Clojure libraries covering everything you need: https://github.com/Convex-Dev/convex.cljc
It is probably a first in history that you can you anything like that at the REPL: run a node, live interact with the network, issue transactions, do off-chain computation... It certainly gives an unfair advantage to Clojurists in this space. Even if you don't have any interest in blockchain, the database alone is already pretty fascinating, even when used locally. You can retrieve and work with datastructures way larger than memory!
The project originally started with Mike Anderson (creator of core.matrix) and we have had a few good names from the Clojure community since then. However we were working in the shadows and are a small team. We are looking for contributors to import more ideas from the Clojure world, help with the tech and the website (we do lack a designer as well!)
We are also keen to help you build decentralized applications. I've just opened the #convex channel if you want to talk about the tech, the current libraries, and ideas we could work on together :)
Eager to have your feedback!#2021-09-1108:21prncVery neat! Is there anywhere on the website where you talk about Clojure as inspiration for some of the lang features? Would be nice to see/read!#2021-09-1109:29Adam HelinsI don't recall how explicit it is in the White Paper, but it's briefly mentioned at least in the Clojure libs and here: https://convex.world/tools/clojure-toolchain#2021-09-1210:10borkdudeNew library: graal-build-time 🎉.
This library automatically configures clojure packages to initialize at build time in native-image builds.
You will likely need this or a similar solution with GraalVM 22 (still in the future) but you can already use it right now to get rid of a deprecation warning.
In fact, I have started using it in #babashka today.
https://github.com/clj-easy/graal-build-time#2021-09-1212:06Karol WójcikI will check it out with HL 😄 Thank you @U04V15CAJ!#2021-09-1212:07borkdudeAnd @UKFSJSM38, @U7ERLH6JX :)#2021-09-1320:06ericdalloclojure-lsp Released clojure-lsp https://github.com/clojure-lsp/clojure-lsp/releases/tag/2021.09.13-19.32.00, the first release supported by https://www.clojuriststogether.org/ clojurists-together gratitude
Besides a lot of fixes and improvements, clojure-lsp has its `diagnostics` feature available via API/CLI now, making clojure-lsp the only tool that can do most lint tasks in a single tool!
• Cleaning namespaces
• Formatting namespaces
• Lint diagnostics (using clj-kondo)
For more details, check #lsp 😄#2021-09-1320:21pezHere’s the first version of a Github Template project for running the http://Excerism.org Clojure Track in the browser. Zero-install, with full Interactive Programming enabled. https://github.com/PEZ/clojure-exercism-template Rationale from the README:
> Why would you want to use another web browser editor than the Exercism built in one? Because this one supports Interactive Programming (aka REPL Driven Development). It is one of Clojure’s main super powers and if you are going to spend time learning Clojure, you probably also should learn the habits and the workflow that makes Clojure programmers so happy and effective.
Please give it a spin! ❤️ Feedback is super welcome. In this thread and/or in #exercism.#2021-09-1408:32practicalli-johnClojure CLI tools user level aliases - for tools, libraries and environments across all your Clojure deps.edn projects
Monthly library updates and readme clean-up
All details in the changelog
https://github.com/practicalli/clojure-deps-edn/blob/live/CHANGELOG.org#2021-09-13#2021-09-1410:38emakI am discovering this gem! awesome 🙂#2021-09-1410:08Karol Wójcikholy-lambda Released a new version of holy-lambda v0.5.0. This release has been done with the financial help of https://www.clojuriststogether.org/ clojurists-together ❤️
Holy Lambda is extraordinary simple, performant, and extensible custom AWS Lambda runtime for Clojure.
https://github.com/FieryCod/holy-lambda
Changes
• HL is now fully decoupled from AWS SAM
• Clojure on official AWS Java runtime is obsolete. As a replacement the new Clojure on Clojure backend has been developed, which is more performant than the official one. (benchmarks in progress)
• Removed interceptors.
• https://fierycod.github.io/holy-lambda
• Smaller & more performant core!
• Update babashka backend to 0.6.1#2021-09-1419:51Jakub Holý (HolyJak)Nice! Perhaps a typo here :
>For Clojure on official AWS Lambda Java runtime the cold start is between 8-12on a 2GB memory-sized environment.
-> 8-12s on
What is the Clojure on Clojure backend and why is it faster than AWS' Java? I couldn't find it quickly in the docs (though I suppose it's there somewhere..)
Also, do you have some benchmarks for all the backend? I've once tried babashka lambda (without HL) and it still had considerable cold start - which I blame on the fact that unpacked it had 140MB (70 bb, 70 jdbc pod) that needed to be transferred and decompressed...#2021-09-1422:36dominicmWhere will you publish the benchmarks when they're ready? I'm very curious!#2021-09-1506:55Karol Wójcik@U0522TWDA thanks! Fixed the typo. Will push the change soon 🙂
Clojure on Clojure is basically uberjar + custom Clojure runtime ran on some sort of JVM. This is different than the official AWS Java runtime that:
1. Invokes the handler using reflection based on name,
2. Uses Java Correto (regular JDK users will be in some time pushed to use Java Correto, which works kinda slow for Clojure) (don't know why, yet)
Regarding babashka backend HL includes the pods in the zip, so no download of pods happen on runtime. Size of the artifact does not matter much in your case I think.
@U09LZR36F Here are benchmarks although not yet edited, and without tiered compilation for Clojure on Clojure, so there will be some significant differences in cold starts i suppose.
https://github.com/FieryCod/holy-lambda/tree/master/benchmarks/holy-lambda-vs-other-runtimes
Disclaimer: Benchmarks for Java are still using OpenJDK.#2021-09-1508:58Jakub Holý (HolyJak)Ok, so the Clojure runtime is essentially a Docker image, currently based on OpenJDK, like this one https://github.com/FieryCod/holy-lambda/blob/master/docs/examples/getting-started/clojure-backend/holy-lambda-example/Dockerfile, correct? And it is faster b/c Correto is slower than OpenJDK for Clojure and because reflection on name is faster than whatever AWS does by default?
> Regarding babashka backend HL includes the pods in the zip, so no download of pods happen on runtime
What I meant was that for cold start, Lambda needs to transfer the whole lambda zip from S3 where it is kept, and the bigger it is the more time that takes. So 1kB Python script will have faster startup than 80MB (22MB compressed) bb (on my PC, unzipping that takes 500ms!)#2021-09-1509:01Karol WójcikClojure runtime is essentially custom runtime, that does not include all the Java'ish bloat, and this is why it's faster. JVM implementation is a user choice, but yeah correto is slow, so by default I'm including openjdk#2021-09-1509:02Karol WójcikRegarding babashka I think you're assumptions are wrong. Do you cache jdbc pod? Or do you download the pod on cold start?#2021-09-1509:07Karol WójcikI mean 2-3 years ago I have packed 200mb of node_modules and cold start was around 300ms.#2021-09-1509:33Jakub Holý (HolyJak)My zip included both bb and the pod#2021-09-1509:35Karol WójcikAre you sure the pod was not re-downloaded? 😄 I had to do some additional work on HL side to ensure it#2021-09-1509:37Karol WójcikAnd if you're using add-deps you can be sure that cold start is high.#2021-09-1512:02Karol WójcikAnyway @U0522TWDA. If you really care about minimal cold starts use native backend. We have some successful stories. Look NextDoc @U0510KXTU 🙂#2021-09-1512:43Jakub Holý (HolyJak)Thank you. I will experiment with that at the next opportunity. I am quite sure (99.9%) the pod was not re-downloaded as I included it using a local path. I still think that transferring 40-50MB (in my case) and unzipping it is bound to take some time, even if there is a super network between S3 and lambda.#2021-09-1512:47Karol WójcikEncourage you to try HL 🙂 Maybe you will see some difference in time 🙂#2021-09-1414:34EddieI am pleased to announce the first release of fijit (https://github.com/erp12/fijit). Fijit is a Clojure library for interop with Scala. The goal of this project is to make it easier and more idiomatic to use Scala projects from within your Clojure projects. Some key features include:
• Conversions between Scala and Clojure collection types.
• Macros for writing Clojure code that targets multiple Scala versions.
• A Clojure implementation of the Scala function types.
• Idiomatic Clojure interfaces for common Scala types like Option, Try, Tuple, and more.
• An experimental Clojure API for Scala reflection and runtime compilation.
If you (like me) have to call out to Scala projects, hopefully some of the functions and macros in fijit can help reduce some of the friction.#2021-09-1414:36Noah BogartI don’t use scala, but this is cool as shit. Congrats on the release!#2021-09-1414:38EddieThanks!#2021-09-1414:39imreImpressive! (doc links in the readme don't work btw)#2021-09-1414:39EddieWoops! Thanks for pointing that out. The link in the sidebar should work.#2021-09-1414:41imrethat indeed does#2021-09-1414:41EddieReadme links should be fixed now.#2021-09-1414:48borkdudeFirst star.#2021-09-1414:49borkdudeA long time ago I tried to use the Clojure REPL from Scala:
https://blog.michielborkent.nl/2016/07/26/clojure-from-scala/
This was during a short adventure in a Scala company.#2021-09-1415:18EddieThat is a very interesting idea! I never thought about inspecting the Scala/Java context using an in-process Clojure repl. Very clever.#2021-09-1501:44EddieThat's perfect! I added it to the FAQ and credited you. Perhaps one day I will retcon the origins to make myself seem far more clever and cultured than I am. 😄 Thanks!#2021-09-1513:46chrisblomNice, i tried to interop with scala code from clojure but gave up#2021-09-1513:47chrisblomit was too painful, i'll keep this lib in mind#2021-09-1415:43borkdudeclj-kondo 2021.09.14 ✨
A new linter :loop-without-recur and several other enhancements and bug fixes.
https://github.com/clj-kondo/clj-kondo/blob/master/CHANGELOG.md#20210914
#clj-kondo#2021-09-1420:41Alex Miller (Clojure team)Clojure https://clojure.org/releases/devchangelog#v1.11.0-alpha2 is now available with the following changes since alpha1:
• https://clojure.atlassian.net/browse/CLJ-2123 Add :as-alias option to require like :as but not load
• https://clojure.atlassian.net/browse/CLJ-1959 Added implementation of update-keys
• https://clojure.atlassian.net/browse/CLJ-2651 Added implementation of update-vals
• https://clojure.atlassian.net/browse/CLJ-1908 Add clojure.test api run-test and run-test-var to run single test with fixtures and report
• https://clojure.atlassian.net/browse/CLJ-1879 IKVReduce - make old slow path (IPersistentMap) faster and extend to Object, detaching it from any fully enumerable set of types
• https://clojure.atlassian.net/browse/CLJ-2600 Don’t block realized? of delay on pending result
• https://clojure.atlassian.net/browse/CLJ-2649 Fix order of checks in some-fn and every-pred for 3 predicate case to match other unrollings
• https://clojure.atlassian.net/browse/CLJ-2636 Get rid of reflection on java.util.Properties when defining clojure-version
• https://clojure.atlassian.net/browse/CLJ-2350 Improve keyword arity exception message
• https://clojure.atlassian.net/browse/CLJ-2444 Fix typo in test-vars docstring
• https://clojure.atlassian.net/browse/CLJ-1509 AOT compile more Clojure namespaces
• https://clojure.atlassian.net/browse/CLJ-2387 Fix off-by-one in socket server port validation
• Update dep to core.specs.alpha (0.2.62)
#2021-09-1509:20imre#2021-09-1509:25imreNevermind, I'll just comment on github#2021-09-1513:29Alex Miller (Clojure team)@U08BJGV6E probably @U050WRF8X is the best person to answer this but I believe the difference here is that with update-keys, the keys are going to change and the structure of the map will change, so there is no reason to update the existing map. also, there are lots of potential issues with changing the key set for different map types (like sorted, ordered, etc). In update-vals, the keys stay the same, so the fastest thing to do is update a transient version of the existing map, if you can.#2021-09-1513:36imreThanks Alex. It caught my eye as we use https://github.com/frankiesardo/linked which keeps insertion order and it became a habit of mine to use (empty m) everywhere I 'modify' a map without knowing the broader context#2021-09-1513:36fogus (Clojure Team)Yes! What @U064X3EF3 said ^^^ 🙂#2021-09-1513:50Alex Miller (Clojure team)Importantly, the docstrings for both update-keys and update-vals both say "returns a new map" which means you should not presume anything about the relationship of the returned map type and the input map.#2021-09-1513:54imreI understand the reasoning but (I guess due to the problems I had when the type was lost) still tend to disagree - (empty m) also creates a new map (be it sorted or ordered etc.) so you aren't really 'modifying' the original one (as you would with (transient m)).
Apologies for making noise if this has already been considered, I won't pursue this any further, just hoped handling this similarly to update-vals could broaden the applicability of this fn.#2021-09-1513:56Alex Miller (Clojure team)tradeoffs exist, this is where we came down on it#2021-09-1513:56imreThank you for the explanation#2021-09-1507:21Johan ThorénAn announcement of somewhat lesser scope.. https://github.com/johanthoren/julian is a tiny library to convert between https://en.wikipedia.org/wiki/Julian_day and common time as we know it (year, month, day, etc.). The library supports two-way conversion and is available for both Clojure and ClojureScript.#2021-09-1511:55borkdudeAddendum to yesterday's announcement about #clj-kondo https://clojurians.slack.com/archives/C06MAR553/p1631634221275000, following up on the release of Clojure 1.11.0-alpha2:
clj-kondo 2021.09.15 now supports :as-alias 🎉#2021-09-1517:18seancorfieldDoes it also recognize update-keys and update-vals?#2021-09-1517:20seancorfield(and I guess there will need to be a clojure-lsp release using this in order for it to benefit Calva users @UKFSJSM38?)#2021-09-1517:20borkdude@U04V70XH6 it should recognize this automatically when you lint clojure 1.11#2021-09-1517:21borkdudebut good point, I should update that in clj-kondo proper#2021-09-1517:22ericdalloYes @U04V70XH6 it's already on clojure-lsp master, it should be available on next release#2021-09-1517:22borkdude@UKFSJSM38 can you check if update-vals is recognized in a project with clojure 1.11?#2021-09-1517:23seancorfieldThanks @UKFSJSM38 -- I asked because, for some reason, clojure-lsp had stopped running in my VS Code instance so I had to reload the "window" to restart it, and that made me curious as to which version is running: 2021.09.13-22.25.35, which uses clj-kondo 2021.08.07-SNAPSHOT#2021-09-1517:26seancorfieldAnd that shows:
Unresolved symbol: update-keys
#2021-09-1517:27ericdalloTested with clojure-lsp master and it's working @U04V15CAJ#2021-09-1517:55borkdude@U04V70XH6 even that version should work with update-keys iff you have .clj-kondo directory in that project so clj-kondo can save a cache of your linted deps#2021-09-1517:56ericdallo@U04V15CAJ even so, if the user change the deps to use a newer clojure (1.11), clojure-lsp would scan the analysis with clj-kondo#2021-09-1517:57ericdalloI did this test with clojure-lsp and it worked, finding update-keys and update-vals#2021-09-1517:57ericdallobecause any change to project.clj or deps.edn triggers a new clojure-lsp full scan#2021-09-1518:12seancorfield@UKFSJSM38 How does LSP run the scan? Does it need to know about aliases? I have a monorepo and everything is behind a couple of aliases so, right now LSP doesn't always seem to startup, until I refresh the VS Code window, and it isn't scanning. I even deleted .lsp/sqlite.db to try to force that.#2021-09-1518:12borkdudeyou can configure the classpath-command for every project#2021-09-1518:13ericdalloFor multiple custom aliases, the best would be to configure th :project-specs in LSP#2021-09-1518:13borkdude{:cljfmt {:indents {#re ".*" ns [[:inner 0] [:inner 1]]}}
:auto-add-ns-to-new-files? false
:project-specs [{:project-path "deps.edn"
:classpath-cmd ["clojure" "-A:dev" "-Spath"]}]}#2021-09-1518:13ericdalloref: https://clojure-lsp.io/settings/#project#2021-09-1518:13borkdudecopied from the docs#2021-09-1518:27seancorfieldYeah, just trying to set that up... So I have a monorepo where the Clojure code is in a subdirectory so it looks like this:
<root>
.clj-kondo/
.lsp/
clojure/
deps.edn
So I guess :project-path should be "clojure/deps.edn" but how would I get it to run :classpath-cmd in the clojure project or will that :project-path be sufficient to tell it that?#2021-09-1518:29ericdallois your clojure code inside clojure folder? if so why not import the clojure folder as the project root?#2021-09-1518:29ericdallothen everything should work right?#2021-09-1518:30seancorfieldNo, we have lots of other stuff in the root of the repo so the "project root" is as shown above, and we run the REPL in the clojure folder.#2021-09-1518:32seancorfieldand then under clojure we have lots of subproject folders, each containing src, test, etc. Those are brought in via the aliases. Here's my config.edn right now:
{:project-specs [{:project-path "clojure/deps.edn"
:classpath-cmd ["clojure" "-Spath" "-M:build:dev:everything:runner:test"]}]}
If I specify :source-aliases instead of :classpath-cmd will that help?#2021-09-1518:34ericdallo@U04V70XH6 I checked the clojure-lsp code, and it will probably don't work as we run the clojure command in the project-root: https://github.com/clojure-lsp/clojure-lsp/blob/master/src/clojure_lsp/crawler.clj#L27#2021-09-1518:34ericdalloso maybe we could improve clojure-lsp to accept an optional path to run the classpath lookup command#2021-09-1518:37ericdallootherwise that would just work if for clojure you import the clojure folder for now#2021-09-1518:41seancorfieldHow about if I add a shell script that cd's to clojure and then runs the clojure -Spath ... command and tell LSP that's the :classpath-cmd ?#2021-09-1518:42ericdallothat could work :)#2021-09-1518:43ericdallomaybe we could improve clojure-lsp to check if the project-file is inside another subfolder not on root and run the classpath-cmd from that folder#2021-09-1518:45seancorfieldThat would also solve the problem 🙂#2021-09-1518:46ericdalloyeah, feel free to open an issue about that :)
Also, let me know if the script that cd into the folder and run the clojure command works as well#2021-09-1518:46seancorfieldOK, well that did seem to work. LSP started and -- after a much longer initialization period this time! -- reports problems that make more sense. And, in particular, update-vals and update-keys are no longer flagged as unresolved /cc @U04V15CAJ#2021-09-1518:46ericdalloSweet :)#2021-09-1518:47ericdallothe next startups should use the .lsp/.cache making it faster#2021-09-1515:30oliyI'm pleased to announce the release of martian 0.1.18 🎉
martian is the http abstraction library for Clojure/script with support for various http libraries, Swagger/OpenAPI, generative testing, VCR recording/playback and more!
https://github.com/oliyh/martian
This release improves:
• Errors thrown using the `hato` client are now handled by the interceptor chain
This release changes:
• An exception is now thrown if the route name is not found when calling an endpoint function https://github.com/oliyh/martian/pull/120 - thanks https://github.com/AndreaCrotti
• The `hato` dependency is updated to `0.8.2`
#2021-09-1515:49Karol Wójcik@U076R6N1L This a great library that I'm already using! Thank you for it! Do you maybe plan to use lighter version of http client for Clojurescript? I would rather not include clojure.core.async , 🙏#2021-09-1515:54Ben SlessI love the name#2021-09-1515:54Ben Sless👽#2021-09-1516:01oliy@UJ1339K2B thanks! do you know of any ring-compatible cljs http clients (apart from cljs-http, which as you point out uses core.async)?#2021-09-1516:04Karol WójcikUnfortunetely no. Which means you would have to write such library yourself#2021-09-1516:30oliyit could be a fork of cljs-http to be honest, it should only be a small change#2021-09-1516:45Karol WójcikYeah. But probably you would have to release a new artifact for it#2021-09-1519:33Jakub Holý (HolyJak)There is https://github.com/lambdaisland/fetch but I guess it is not ring-compatible, whatever that means#2021-09-1714:36oliy@UJ1339K2B i did some hacking last night: https://github.com/oliyh/cljs-http-promise#2021-09-1716:01oliyand now https://github.com/oliyh/martian/tree/master/cljs-http-promise#2021-09-1806:10Karol WójcikThis is so awesome! Thank you!!#2021-09-1808:19oliy🙂#2021-09-1520:53Alex Miller (Clojure team)tools.build v0.4.0 801a22f is now available
• uber - TBUILD-2 - add support for configurable conflict handlers
• uber - TBUILD-11 - detect file and dir with same name in uber
• uber - TBUILD-16 - expand default exclusions
• uber - add support for custom exclusions#2021-09-1603:05seancorfieldio.github.seancorfield/build-clj {:git/tag "v0.2.2" :git/sha "5a12a1a"} -- a wrapper for tools.build with a lot of sane defaults to reduce boilerplate -- https://github.com/seancorfield/build-clj
• Now includes an uber task -- which includes merging of log4j2 plugins cache files!
• Accepts many more options per underlying tools.build tasks so you can still customize "everything" when using build-clj
• Overhauls/expands docstrings and readme
• Updates tools.build to v0.4.0
Follow-up in #tools-build#2021-09-1606:22borkdudeWhy use bb for the alias of your lib instead of e.g. cb (corfield build)? #2021-09-1606:38seancorfieldBecause b is the example given for tools.build and bb seemed natural for an adjunct to that.#2021-09-1606:41borkdude:thinking_face: #2021-09-1617:09lreadWill folks maybe get confused that bb relates to babashka in some way?#2021-09-1617:11borkdudeI guess Sean isn't aware of how many times some people type those letters every day in their terminal ;)#2021-09-1617:28seancorfieldI would have used just b for the alias but tools.build already used that, and this is a "better build". Folks can of course use whatever aliases they want, but all my OSS projects that use build-clj use bb for it so I want to keep that consistent between those projects and build-clj itself.#2021-09-1617:32borkdudeI remember one discussion about an algorithm to automatically suggest aliases based on some heuristics in clj-kondo. I think I also remember why that never got written. If the library was named corfield.better.build I think the alias would have made a lot more sense.#2021-09-1617:39seancorfieldNaming is hard! ¯\(ツ)/¯#2021-09-1619:41lreadSo @U04V70XH6 you do know that the babashka executable is named bb right? I think this is what @U04V15CAJ is alluding to as a potential source for confusion.#2021-09-1619:52seancorfieldI have heard of babashka yes.#2021-09-1620:59lreadOk cool, just thought there was maybe some bb misunderstanding in the back and forth - I think that there isn’t! simple_smile#2021-09-1621:24seancorfieldI just don't think anyone is going to confuse, say, the set shell command with the set alias for clojure.set, so I'm not sure why anyone thinks that a bb command and a bb alias for a namespace is going to cause confusion either?#2021-09-1621:27lreadYeah, you could be right there! Perhaps just a case of babashka zealotry on my part!#2021-09-1706:44borkdudeI’ve seen several snippets with this alias and every time I cringe since the alias seems out of place and indeed is very much associated with bb (babashka). The corfield project is still young so it’s still a good time to change your mind, but it doesn’t seem like you’re open to this. At least I’ve tried.#2021-09-1706:46seancorfieldI'm sorry you "cringe" but that's really on you. No one "owns" an alias or an acronym.#2021-09-1706:48seancorfieldAnyone who doesn't like bb as a namespace alias will just pick something else.#2021-09-1706:51seancorfieldThe "general recommendation" for aliases is to use the last ns segment if it's unique, else either the prior segment or a "grouped" segment name -- but clojure.tools.build.api :as b doesn't follow that. I am targeting tools.build so bb is pretty natural as a wrapper/higher-level ns. At work we use our build.clj as a "REPL" so we run clj -M:build -i build.clj -r and then it's all (build/whatever {}) in the REPL so that's another reason why I didn't want to use build as the alias for org.corfield.build.#2021-09-1707:13borkdudeYou're right, I'm moving on, just wanted to get this off my chest :).#2021-09-1707:12vlaaadreveal I am happy to announce a new version of Reveal — https://vlaaad.github.io/reveal-pro! Reveal stands for Read Eval Visualize Loop — powerful and extensible REPL output pane suitable for development of any Clojure program. Reveal Pro brings in more tools that help with insight, so you can focus on your problems with data and knowledge you need available as soon as you need it.
A flagship feature of initial release is Spec Forms that provide UI for specs that can be used to create data structures satisfying the spec (see below).
Give it a try and tell me what you think, either here or in #reveal#2021-09-1709:55Jakub Holý (HolyJak)Nice! I will think about use cases for this 🙂 Good luck with the pro version, it would be great to make Reveal dev self-sustaining.
I guess I need to really start using Reveal so that I can eventually upgrade to Pro 🙂#2021-09-1710:04vlaaadThanks! Some Forms use cases are listed on the Reveal Pro page. Another use case I have in mind for the future is extending Forms to support json schema. That way you'll be able to explore and build Vega views interactively (see what's possible today: https://vlaaad.github.io/vega-in-reveal)#2021-09-1710:06vlaaadAlso extending to some API schemas like swagger/openapi/graphql so you can build and run queries from Reveal#2021-09-1720:34eggsyntaxAs one bit of anecdata, I'd be a lot more likely to invest in this if I could buy it once and be done -- I just won't use software that insists on a recurring charge. Maybe worth considering that as at least an alternate option?
Either way, cool stuff!#2021-09-1723:09vemvAdding to the anecdata, I froze https://Tower.app at version 2 the day version 3 came out and became recurring. I prefer using a fixed version (even if 'outdated') and not adding another charge to the pile of recurring stuff.
Maybe as a middle ground you can offer a choice between a fixed product with 1y bugfix support or a constantly-updated product billed monthly.
Either way, best wishes ✌️clojure-spin reveal#2021-09-1723:22seancorfieldCounter-anecdata: I subscribed to Cognitect's Patreon ($3/month) for REBL for every month that they collected patronage (they stopped when they bundled REBL with Datomic Free). I pay multiple (annual) subscriptions for software (a couple of Skype-related ones, Office 365, and a few other things -- I pay annually because it saves money over monthly subscriptions). I would say that anyone who is sponsoring other developers on GitHub is essentially paying a recurring monthly subscription. Lots of people are comfortable with a recurring model.#2021-09-1723:24seancorfieldI use Reveal day-in, day-out but I'm happy with the current feature set in the free version -- but I'll be keeping an eye on Reveal Pro and if it adds features I want to use, I'd be happy switching up to the recurring subscription.#2021-09-1723:26vemvI wonder if subscription burn-out is a thing
personally at some point I felt like I was sponsoring the internet 🙃#2021-09-1723:35phronmophobicmore anecdata: developers are a really tough demographic to build products for. The trouble is that they generally don't want to pay for software regardless of how generous your offering is. You're probably also not charging enough.#2021-09-1800:10vemvCursive is an awesome success story btw#2021-09-1800:21eggsyntax> I would say that anyone who is sponsoring other developers on GitHub is essentially paying a recurring monthly subscription.
>
For me personally, that feels different. I don't feel as locked into it; I can stop if I choose without losing access to something.
> developers...generally don't want to pay for software regardless of how generous your offering is.
>
Sadly true, although there are certainly some out there that are happy to pay for good software 🙂#2021-09-1801:21seancorfield> For me personally, that feels different. I don't feel as locked into it; I can stop if I choose without losing access to something.
It's weird what we value, I guess. For example, on Patreon, you get access to different stuff at each patronage tier, so if you go from $10/month to $5/month you "lose access to something" but I think we (software developers) don't value art/writing/music the same way we value software...#2021-09-1801:22seancorfieldI'd love a model where the features available in a software tool are directly related to how much you choose to pay a month, so you could drop down to a more basic tool for a while if you wanted, then push back up to the premier version for a month if you wanted.#2021-09-1801:29eggsyntaxReplying in #off-topic so as not to hijack the thread (sorry @U47G49KHQ!)#2021-09-1806:22vlaaadNo problem, and thanks for a very interesting discussion! My POV is that I want to be able to spend more time developing Reveal because I have many ideas and not enough time, and some recurring revenue might eventually allow me to spend more time on it. Given how niche is this product, I don't see one-time purchases as a viable model that allows me to spend more time developing Reveal.#2021-09-1720:07fogus (Clojure Team)New Cognitect Labs aws-api v0.8.524 and new service API available!
CHANGES
• aws-api upgraded to core.async 1.3.622
• new AWS service API available (services version v814.2.991.0): kafkaconnect
README: https://github.com/cognitect-labs/aws-api/
API Docs: https://cognitect-labs.github.io/aws-api/
Changelog: https://github.com/cognitect-labs/aws-api/blob/master/CHANGES.md
Upgrade Notes: https://github.com/cognitect-labs/aws-api/blob/master/UPGRADE.md
Latest Releases of api, endpoints, and all services: https://github.com/cognitect-labs/aws-api/blob/master/latest-releases.edn#2021-09-1822:41uochanJust released antq ver 1.1.0, Tool to point out your outdated dependencies.
https://github.com/liquidz/antq
Support upgrading :tag and :git/tag in deps.edn! (upgrading :sha and :git/sha at the same time, of course)#2021-09-1902:48seancorfieldclojure -Ttools install com.github.seancorfield/clj-new '{:git/tag "v1.2.359"}' :as clj-new
https://github.com/seancorfield/clj-new
• Switch app, lib, polylith, and template templates to generate tools.build-based project (instead of depstar, which has been archived).
• Fix #80 by improving the failure reporting when a template cannot be located.
• Fix #79 by warning about options we don't recognize.
• Switch project itself to use tools.build intead of depstar.
• Update .gitignore template files (includes change of LSP database location).
Follow-up in #deps-new (which is for both clj-new and deps-new).#2021-09-1909:25Ben SlessI would like to share with you a project I have been working on in the past few months, https://github.com/bsless/stress-server, aimed at setting up reproducible stress testing and profiling environments for Clojure servers.
It's an ongoing project with the goal of finding the best configurations and settings, understanding the effects of JVM versions and GC algorithms, identifying performance bottlenecks and in general, learn!
Currently I have results for Java 8, 11, 15, different GC algorithms, blocking and non blocking handlers, different operating rates and httpkit, aleph, jetty, undertow and pohjavirta for servers
I hope you can find interesting and useful bits in it. It should help inform developers when choosing libraries and setting up servers, and library developers on the effects of their design choices.
Contributions and feedback are very welcome. We can push the ecosystem forward.
• project: https://github.com/bsless/stress-server
• inaugural blog post: https://bsless.github.io/stressed-servers/#2021-09-1909:30ikitommiwell done, a really comprehensive setup! the Aleph InputStream bug is reported here: https://github.com/clj-commons/aleph/issues/523#2021-09-1909:33Ben Slessaha! Well, after I read muuntaja's docks and returned a byte array I worked around it by accident. Didn't really dig into Aleph looking for the answer, though#2021-09-1913:14schmeereally cool work, thanks! it would be nice if you included links to the PRs so we can follow the progress :thumbsup:#2021-09-1917:17Jakub Holý (HolyJak)Awesome project, thanks! I can't even imagine how much effort went into this...#2021-09-1917:44Ben Sless@U0522TWDA More than the effort, you can't imagine how much time it took, there are hundreds of possible combinations for all the scenarios. Each one runs for 10 minutes. That means that profiling one server takes an entire night.
Now imagine waking up in the morning and finding out you made a mistake 😄#2021-09-1917:45Jakub Holý (HolyJak)I guess you are either saint or crazy 🙂 Thank you in either case! 🙂#2021-09-1917:51Ben SlessProbably the latter, but I haven't been professionally tested 🙃
I working in VLSI has made me more tolerant of 24h long simulations#2021-09-2009:44Ben SlessLaunched a run with java 17
Results in a day or so 🙂#2021-09-2016:41ikitommiis there a summary of the results somewhere?#2021-09-2016:42ikitommiold, but related btw: https://github.com/ptaoussanis/clojure-web-server-benchmarks#2021-09-2016:59metasoarousHow feasible would it be to parallelize the tests (e.g. on aws) to speed things up?#2021-09-2017:47Ben Sless@U055NJ5CC there's a big CSV with everything as part of the repo. I'm actually hoping some of the kind folks from the data-science / visualization groups will take a crack at it
Interim conclusions are that http-kit can suffer almost everything, and that later JVM is better
@U05100J3V sadly no, I want to make sure I'm comparing apples to apples as much as possible, unless you're willing to pay for on-demand instances. Are you the metasoarous behind oz? I've been fighting with Vega for the past few hours trying to make some nice interactive plot with it which would make drawing conclusions easier#2021-09-2017:52metasoarousThat would be me 🙂 How can I help?#2021-09-2017:53metasoarousRegarding apples to apples & on-demand instances, I was assuming as much; Could still imagine it being useful for situations where you need tighter turn around. But also probably a lot of work, so don't do it on my account.#2021-09-2017:55Ben SlessIs there an appropriate channel to discuss it? It would get very off topic#2021-09-2018:04Ben Sless@U055NJ5CC what I usually do to get a feel for the data is cd to the png directory, pick out one file name, (doesn't really matter where you start), then try replacing each of the dimensions with * and view the matching files in feh or another program which would let me page between them. That way I can see the effects of modifying one parameter with all others being equal#2021-09-1911:27borkdudenbb, a scripting environment like babashka, but for Node.js, v0.0.75 now has built-in integration with applied-science/js-interop!
This means you can run this example with stock nbb:
(ns example
(:require [applied-science.js-interop :as j]))
(def o (j/lit {:a 1 :b 2 :c {:d 1}}))
(prn (j/select-keys o [:a :b])) ;; #js {:a 1, :b 2}
(prn (j/get-in o [:c :d])) ;; 1
See https://github.com/borkdude/nbb#js-interop and #nbb for more.
Thanks Matt Huebert for co-operating on this.#2021-09-1921:15ribelodoxa is a simple in-memory database, trying to copy the best solutions from `datascript`, `crux`, `fulcro`, `autonormal`, `kechema`, `shadow-grove`
I finally finished something between poor man . incrementally maintained views and in the meantime, I also completely rewrote datalog query parsing and many other things. all using meander of course, just because I can 🙃
https://github.com/ribelo/doxa#caching--matching#2021-09-1921:51Jakub Holý (HolyJak)Interesting. What is shadow-grow?#2021-09-1921:58ribelohttps://github.com/thheller/shadow-experiments/tree/master/src/main/shadow/experiments/grove#2021-09-1921:58ribelomore specifically
https://github.com/thheller/shadow-experiments/blob/master/src/main/shadow/experiments/grove/db.cljc#2021-09-2017:11metasoarousIs this actually differential dataflow, or just incrementally maintained views which fall back to re-evaluation from scratch when there's a recursive query?#2021-09-2017:26ribelotoo difficult question for me @U05100J3V#2021-09-2017:26ribelo😉#2021-09-2017:26ribeloI'm not sure I know the definition#2021-09-2017:27metasoarousNo worries 🙂#2021-09-2017:28ribeloIn general, the scheme looks like this#2021-09-2017:28ribelotransaction -> diff -> match diffs -> re-run queries
#2021-09-2017:29ribeloafter each transaction the diff is calculated using editscript#2021-09-2017:29metasoarousThat's not differential dataflow. That's effectively what posh is doing.#2021-09-2017:29metasoarous(I know posh has some edge cases, but still; That's the basic methodology)#2021-09-2017:30metasoarousWhich is fine, but I'd suggest not trying to market it using that terminology, because it might catch folks off guard expecting it to be something it's not.#2021-09-2017:31ribeloposh from what I remember matches not diffs but transactions#2021-09-2017:31ribelobut I guess it doesn't matter#2021-09-2017:32metasoarousNo, it doesn't match transactions, but rather the datoms (diffs, effectively) produced by the transactions#2021-09-2017:32ribelothat's what I meant#2021-09-2017:33ribelobut again, as far as I remember, there is no difference check and a transaction that changes nothing also causes recalculation of queries#2021-09-2017:36ribelothanks @U05100J3V, I corrected the description#2021-09-2017:50metasoarousYou're welcome; Thanks for clarifying.#2021-09-2000:12seancorfieldclojure -Ttools install io.github.seancorfield/deps-new '{:git/tag "v0.3.0"}' :as new
https://github.com/seancorfield/deps-new
• Adds template project generation, so you can create your own deps-new templates more easily.
• Fixes a bug in :transform handling while copying files that were not explicitly listed.
• Fixes a bug in the group/artifact ID used in generated build.clj files.
Follow-up in #deps-new#2021-09-2105:07robert-stuttafordfyi @U04V70XH6 when i run this command with clojure 1.10.3.967:
-T is no longer supported, use -A with repl, -M for main, or -X for exec
#2021-09-2105:09robert-stuttafordnot sure if this is a me problem or not 😄#2021-09-2105:10seancorfieldAre you sure about that version?#2021-09-2105:12robert-stuttaford.... now i'm not. i'll dig#2021-09-2105:13seancorfield1.10.1.697 had that message https://github.com/clojure/brew-install/blob/1.10.1.697/src/main/resources/clojure/install/clojure#L47#2021-09-2105:14robert-stuttafordwhen i look these two ways, it lines up:
brew info clojure/tools/clojure
clojure/tools/clojure: stable 1.10.3.967
The Clojure Programming Language
/usr/local/Cellar/clojure/1.10.3.967 (11 files, 15.4MB)
Built from source on 2021-09-02 at 07:34:08
From:
License: EPL-1.0
==> Dependencies
Required: rlwrap ✔
==> Analytics
install: 2,891 (30 days), 7,866 (90 days), 44,626 (365 days)
install-on-request: 2,883 (30 days), 7,834 (90 days), 44,356 (365 days)
build-error: 0 (30 days)
$ clojure
Clojure 1.10.3
user=> (clojure-version)
"1.10.3"
user=>
#2021-09-2105:14robert-stuttafordok, i'll spelunk and see if i somehow have more than one installed! sorry for the noise 🙂#2021-09-2105:19seancorfield1.10.3.899 was the first version since then that did not have that message.#2021-09-2105:19seancorfieldwhat does clojure -version or clojure -Sdescribe say?#2021-09-2105:20robert-stuttafordi found it. i have that version installed too. my goodness.#2021-09-2105:21robert-stuttafordagain, apologies for the noise, @U04V70XH6!#2021-09-2105:21seancorfieldNP. I knew it was an old CLI message so I knew you were not running that version 🙂#2021-09-2105:23robert-stuttafordyour excellent knowledge just saved me a lot of potential trouble here haha#2021-09-2002:55djblueThe portal data inspector has a new release, 0.15.1. Some highlights are: a new hex/ascii viewer for binary data and initial support for remote runtimes via socket repl. For more details see https://github.com/djblue/portal/releases/tag/0.15.1#2021-09-2006:38djbluehttps://clojurians.slack.com/archives/C0185BFLLSE/p1632119799019600?thread_ts=1632112543.018300&cid=C0185BFLLSE, try 0.15.1 👌#2021-09-2107:51Carsten BehringI am proud to announce a new release of the clj-py-r template for Clojure.
It creates a template Clojure project with a Dockerfile, which allows to use python, R and Julia(new in 1.4.0) from a Docker based nrepl without any configuration.
See here for more information:
https://github.com/behrica/clj-py-r-template#2021-09-2116:08metasoarousSomehow I missed that you'd released this; This is great!#2021-09-2110:32oliyI've released a new ring-compatible HTTP library for cljs, cljs-http-promise
https://github.com/oliyh/cljs-http-promise
It's a fork of the popular https://github.com/r0man/cljs-http but returns promises instead of core.async channels which hopefully give better semantics.
There is also a new martian package for it as well: https://github.com/oliyh/martian/tree/master/cljs-http-promise#2021-09-2113:40Alex Miller (Clojure team)Clojure CLI 1.10.3.981 is now available https://clojure.org/releases/tools#v1.10.3.981
• Fix nested session cache computation for local pom model building
• Update to latest AWS API libs
• Downgrade Maven resolver libs to better match Maven core libs
• Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.12.1048#2021-09-2115:38Dimitar UzunovThanks for the release! Will the resolver changes help with https://clojure.atlassian.net/browse/TDEPS-207 ?#2021-09-2115:44Alex Miller (Clojure team)in one case we can repro, yes, but I am not confidant that it is "the" answer#2021-09-2212:39nonrecursivehey y’all, I’ve re-built https://jobs.braveclojure.com/. I want the site to be as useful as a job board possibly can be to the Clojure community.
The biggest change to get there is that the service is now freemium: any company can post unlimited listings for free, or become a sponsor to share the ad in more channels and get better placement. I’m hoping this will help everybody and make it sustainable for me to continue improving the service. More thoughts on that in this https://jobs-blog.braveclojure.com/2021/09/20/a-better-clojure-job-board.html.
I’d love any feedback 🙂 This community’s been so good to me and it feels good to try to contribute more.#2021-09-2223:05Alex Miller (Clojure team)Clojure CLI 1.10.3.986 is now available https://clojure.org/releases/tools#v1.10.3.986
• Fix nested session cache computation for local pom model building (last release accidentally did not actually include this fix, oopsie)
• Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.12.1048#2021-09-2303:14Chris McCormickHey all, yesterday I banged out this little prioritization app in cljs: https://riceprioritization.com/
It's a way to help you prioritize your projects/tasks/options using the RICE method.
You can find the source code here: https://github.com/chr15m/riceprioritization.com
PRs most welcome.
Enjoy!#2021-09-2306:07robert-stuttafordthis is really cool! may i suggest including a sample data set so that it's easy to see how the system works?#2021-09-2309:21Chris McCormickGood idea, thanks!#2021-09-2822:36Chris McCormickI added a sample data set as per your suggestion, thanks!#2021-09-2905:57robert-stuttafordneato, thanks!#2021-09-2404:45pfeodrippeReleased v0.0 of Pitoco. https://github.com/pfeodrippe/pitoco, a OSS library to help you check your endpoint schemas (using spec-provider, Malli and Pathom). See quick video at https://youtu.be/iMcUTygFrfk.
Totally inspired by what Akita Software has been doing.#2021-09-2409:42borkdudeAnnouncing clj-easy/graal-config! https://github.com/clj-easy/graal-config
A repo that hosts configurations for Clojure and Java libraries that you can use a dependencies in your native-image builds!
Join #clj-easy for more info on this.#2021-09-2411:08delaguardoThanks! Very clever solution to provide such configuration)
btw. there is a github action to provision different versions of graalvm as a part of your workflow - https://github.com/marketplace/actions/setup-graalvm-environment#2021-09-2411:11borkdudeYes, I recommended this to @UJ1339K2B but he told me that this doesn't support setting up a development version.#2021-09-2411:21Karol Wójcik@U04V4KLKC yep. Having dev version of Graal would be much appreciated #2021-09-2411:22Karol WójcikDoes the action allows setting multiple Graal versions? If yes where the action set’s the base directory for each?#2021-09-2411:27borkdudeI think the point of this setup action is that it adds one version to the environment, we have a slightly different use case, or we should re-organize things in different jobs#2021-09-2411:27delaguardoI can add dev version today.
each version installed in the separate directory following …/GraalVM/%graalvm-version%-%java-version%-%arch%/x64 notation. Also this action expose a set of environment variables:
• JAVA_HOME
• JAVA_HOME_%graalvm-version%.%java-version%.%arch%
• GRAALVM_HOME
first and last will be overwritten by the last action run but second will be present for every followup steps#2021-09-2411:27borkdudeah right#2021-09-2411:27delaguardoso it is possible to provision multiple graalvm versions#2021-09-2411:27borkdudeso then you can just do setup-graalvm, execute test, setup-graalvm v2, execute test, etc.#2021-09-2411:28borkdudesetting GRAALVM_HOME is excellent because this is what most tools already use#2021-09-2411:28borkdudePerhaps you can make it so that setup-graalvm adds always the latest dev version#2021-09-2411:28borkdudeThis will also solve the problem for us that our builds will fail when the dev version is removed#2021-09-2411:29delaguardoyes, I’m already working on it while we are speaking )#2021-09-2411:30borkdudecool! 🙏#2021-09-2411:30Karol WójcikOr we can override GRAALVM_HOME from our test suite :D#2021-09-2411:31borkdude@UJ1339K2B I think we can just make a github matrix and use setup-graalvm#2021-09-2411:32Karol WójcikAh right.#2021-09-2411:32Karol WójcikCool idea.#2021-09-2411:33Karol WójcikThank you @U04V4KLKC :man-bowing:🙏🙏#2021-09-2412:53delaguardohttps://github.com/DeLaGuardo/setup-graalvm/pull/20/checks?check_run_id=3700067176
I manage to add suport for latest nightly build. But it requires slight adjustments in workflow file.
1. graalvm: “nightly”
2. personal-token: ${{ secrets.GITHUB_TOKEN }}
#2021-09-2412:55delaguardoright now it exposes the same set of env variables except JAVA_HOME_%version%. Because version is unknown before run I expose “JAVA_HOME_NIGHTLY”#2021-09-2412:55borkdudeThat's not a problem#2021-09-2412:56borkdudeThanks!#2021-09-2413:05delaguardoreleased as 5.0 version#2021-09-2411:48Ivar RefsdalI'm pleased to announce yoltq, a queue library for Datomic that supports retries, backoff, ordering and more. On-prem only.
https://github.com/ivarref/yoltq#2021-09-2423:06Jeff EvansAnnouncing the first release of java-case, a tiny utility macro for concisely selecting different forms based on the executing JDK version.
https://github.com/jeff303/java-case
This is my first Clojure library, so all suggestions/feedback welcomed.#2021-09-2423:22seancorfieldNice! I have a use for this at work immediately to replace the ad hoc stuff we're currently doing. And thank you for using clj-new and build-clj!#2021-09-2500:42Jeff EvansThanks, Sean. Great to hear. And yeah, clj-new definitely made it super easy to publish to Clojars, which was nice.#2021-09-2601:04seancorfieldcom.github.seancorfield/honeysql {:mvn/version "2.0.813"} -- Turn Clojure data structures into SQL! -- https://github.com/seancorfield/honeysql/releases/tag/v2.0.813 -- quite a few enhancements since the gold release a month and a half ago! Follow-up in #honeysql#2021-09-2710:19Vladislavthanks!#2021-09-2712:08plexusThe first release of Deja-Fu is out, a lightweight "local" date/time library for ClojureScript https://github.com/lambdaisland/deja-fu#2021-09-2812:27henryw374I found the readme is a bit vague on the kind of scenarios where going lightweight would be worthwhile, so I have done an experiment, written up here: https://widdindustries.com/clojurescript-datetime-lib-comparison/
tl;dr, for a cljs React app, going lightweight is not worthwhile. Happy to be shown I'm wrong.#2021-09-2810:07borkdudeAnnouncing: neil
https://github.com/babashka/neil
A CLI which adds common features to your #clojure deps.edn projects.
It's installable with Homebrew. If this is useful to you, I'd be happy to receive more features.
Neil is made with #babashka :)#2021-09-2810:10Karol WójcikWould it be possibile to manage configs from graal-config with neil? Or it's not a scope of this tool?#2021-09-2810:11borkdudePerhaps, haven't thought about it yet.#2021-09-2810:11borkdudeThe first thing I'd like to fix is the formatting of the deps.edn which is a bit off.#2021-09-2812:02eskosSo the name is a donk at Lein(ingen)? In that context, is the envisioned scope to gather all the new low level things such as new build tools and deps.edn and combine them into an actual build integration tool through neil or is it just a way to have shorthands for aliases?#2021-09-2812:04borkdude@U8SFC8HLP I plan to add the ability to inject tasks into a bb.edn and then you can use bb test to run tests in your project for example. This gives you some of the UX that lein has but still with the possibility to tweak things.#2021-09-2812:04borkdudebut I want to make this optional so this tool can be used in a non-opinionated way#2021-09-2812:06eskosRighto 🙂 This matters to me only in the sense that I want to understand where this whole uneaseness with Lein getting disfavored is going to go in the long run… I’m not so sure on the non-opinionated part, but that’s a separate discussion. Your goals for this sounds good 🙂#2021-09-2812:06borkdudewe'll see how it evolves :)#2021-09-2812:07borkdudeI find myself adding build.clj files to deps projects because depstar is deprecated so that fulfills the goal of this tool for me right now#2021-09-2812:11borkdudefor fun we could add neil test :only foo.bar which then invokes clojure -M:test -n foo.bar or so :P#2021-09-2812:13borkdudeI'm willing to receive a PR for that :P#2021-09-2812:39kwrooijenI'd like to see neil being able to run tasks. Being able to manage (most) thinks within an easy to understand tool would also be good for beginners#2021-09-2812:39kwrooijenclj cli just doesn't seem friendly enough (compared to lein)#2021-09-2812:40borkdudelike neil test :only foo.bar ?#2021-09-2812:40kwrooijenYeah exactly#2021-09-2812:41borkdudeyeah I agree#2021-09-2812:41borkdudePR welcome :)#2021-09-2812:41kwrooijenI'll see if I have the time budget 😬#2021-09-2812:41borkdudehehe no worries, no hurry#2021-09-2812:41borkdudejust collecting ideas is already valuable#2021-09-2812:42kwrooijenMight want to think this through a bit more#2021-09-2812:42kwrooijenWould be great to have configurable tasks (where the CLI tool shows you all options and such)#2021-09-2812:42borkdudeThis is already what bb tasks is, have you used that?#2021-09-2812:42kwrooijenhmm no I haven't#2021-09-2812:42kwrooijenI'll look into that#2021-09-2812:43borkdude• https://book.babashka.org/#tasks
• https://www.youtube.com/watch?v=u5ECoR7KT1Y#2021-09-2813:41lreadCool! You have a real skill in naming your projects!#2021-09-2814:02Johan ThorénNaming is actually one of the hardest things in programming.#2021-09-2817:57Steven DeobaldAdds calendar invite for 2031. "See who remembers why this thing is called neil."#2021-09-2822:06borkdudeAdded some new options:
https://twitter.com/borkdude/status/1442963045752483841#2021-09-2906:47jumar@U04V15CAJ I tried to install neil with
brew install babashka/brew/neil
but it failed:
==> Tapping babashka/brew
Cloning into '/usr/local/Homebrew/Library/Taps/babashka/homebrew-brew'...
remote: Enumerating objects: 44, done.
remote: Counting objects: 100% (44/44), done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 44 (delta 7), reused 43 (delta 6), pack-reused 0
Receiving objects: 100% (44/44), 5.42 KiB | 1.81 MiB/s, done.
Resolving deltas: 100% (7/7), done.
Error: Invalid formula: /usr/local/Homebrew/Library/Taps/babashka/homebrew-brew/Formula/
#2021-09-2906:50jumarI had an ancient version of babashka so tried to upgrade it just in case but neil install is still failing.#2021-09-2906:52borkdudeWeird. Can you make an issue? Perhaps you need to update brew as well?#2021-09-2907:28jumarbrew is typically auto-updated and an explicit update didn't help.
I created https://github.com/babashka/neil/issues/5#2021-09-2907:28jumarBtw. manual installation works fine.#2021-09-2907:29borkdudeThanks. I'll look into if I can reproduce it. Can you also mention the brew version, macos or linux version?#2021-09-2908:34borkdudeFixed#2021-09-2909:59borkdude@U06BE1L6T Something else was wrong, now also fixed#2021-09-2910:00borkdudeAnd added another feature:
$ neil add dep borkdude/sci :latest-sha true
$ cat deps.edn
{:deps {borkdude/sci {:git/url ""
:git/sha "a0dd7fa2a087ed1f524fd22cb73139f571ff469d"}}
:aliases {}}#2021-09-2910:25Karol WójcikDoes this feature works somehow with our graal-config? 😄#2021-09-2910:25Karol WójcikIf yes we can put the usage in the description : )#2021-09-2910:26borkdude@UJ1339K2B Hmm, we could add neil add dep clj-easy/graal-config :deps/root taoensso.timbre#2021-09-2910:27Karol WójcikOh, yes pleeease ❤️#2021-09-2910:28Karol WójcikBut probably we have do differentiate the graal-config from the regular dependencies, since it's multi artifact deps.edn monorepo#2021-09-2910:30borkduderight#2021-09-2910:31borkdudewe have to make a separate command for it :)#2021-09-2910:31borkdudeneil add graal-config taoensso.timbre#2021-09-2910:35borkdudebut we also support :as com.github.clj-easy/graal-config-cheshire#2021-09-2910:36borkdudeor wait no you can just use that name#2021-09-2910:36borkdudeno that won't work#2021-09-2910:36borkdudeso :as should be good#2021-09-2913:09Karol WójcikI have tried:
neil add dep com.github.clj-easy/graal-config :deps/root config/com.taoensso/nippy :as com.github.clj-easy/graal-config-nippy :latest-sha
But this add a dependency with {:mvn/version nil}#2021-09-2913:42borkdudeWell this option isn’t implemented yet. Also you should provide true to latest sha #2021-09-2914:05borkdudeI'll work on this now#2021-09-2914:25borkdude@UJ1339K2B Should work now:
$ neil add dep com.github.clj-easy/graal-config :deps/root config/com.taoensso/nippy :as com.github.clj-easy/graal-config-nippy :latest-sha true
$ cat deps.edn
{:deps {com.github.clj-easy/graal-config-nippy {:git/url ""
:git/sha "7a2cc5b1b1652580e26d990cf5bac2ed48247b7e"
:deps/root "config/com.taoensso/nippy"}}
:aliases {}}
in neil v0.0.11#2021-09-2914:26borkdudeoops one bug#2021-09-2914:26borkdudethe git/url isn't correct#2021-09-2914:27Karol WójcikYeah 😄#2021-09-2914:27Karol WójcikBut, we almost got it 😄#2021-09-2914:30borkdudeShould be fixed in v0.0.12#2021-09-2915:13eskosThis is so minor irrelevance but wouldn't :sha/latest read better than :latest-sha :)#2021-09-2915:13eskosDunno which part would even be responsible of that in this stack...#2021-09-2915:16borkdudeI'm not sure if all options should be namespaced keywords ;)#2021-09-2915:16borkdudegit/sha, sha/git, ...#2021-10-0416:40vnczQuestion: did you think about integrating this as a Clojure tool?#2021-10-0416:41vncz@U04V15CAJ https://clojure.org/reference/deps_and_cli#_using_named_tools#2021-10-0416:46borkdude@U015VUATAVC I have considered this, but one of the goals of neil was to see if it's feasible to package a bb script as a standalone brew/scoop/nixos package#2021-10-0416:46borkdudeI might make a tool version of this later on. But one of the benefits of having it as a bb script is that it's fast. I don't want to wait a few seconds to add something to my deps.edn#2021-10-0416:47vnczFair#2021-09-2821:10KelvinAt Yet Analytics, we've recently open-sourced a core product written in Clojure - lrsql (aka SQL LRS). This project uses HugSql to interface with three different SQL backends (H2, SQLite, and Postgres) to store learning data.
As part of the lrsql development process, we released colossal-squuid, an open-source Clojure(script) library that generates sequential UUIDs (SQUUIDs) which follow the https://datatracker.ietf.org/doc/html/draft-peabody-dispatch-new-uuid-format. We use SQUUIDs in lrsql as primary key IDs, where their strict monotonicity makes them useful as query cursors.
lrsql repo: https://github.com/yetanalytics/lrsql
colossal-squuid repo: https://github.com/yetanalytics/colossal-squuid#2021-09-2909:50Ivar RefsdalGreat idea and project! It will surely be useful for the company where I wok. I submitted an issue now that proves and proposes a fix for a race condition.#2021-09-2917:51KelvinA fix has been applied: https://github.com/yetanalytics/colossal-squuid/pull/11#2021-09-3007:27pithyless@U02FU7RMG8M are you familiar with mulog's flake [0] and if so, can you share some insight on pros/cons of choosing one library over the other? Asking as someone who has not studied the code for colossal-squuid yet, so feel free to just respond "RTFM". :)
[0] https://github.com/BrunoBonacci/mulog/blob/master/mulog-core/java/com/brunobonacci/mulog/core/Flake.java#2021-09-3015:46KelvinNever heard of it before so I'm reading through it, and two three things stood out:
• Flake.java is part of a larger library, which in turn has a bunch of dependencies. Not only is colossal-squuid one library dedicated to generating SQUUIDs, I designed it to not have any dependencies at all (Clojure(script) and test deps excepted).
• The IDs Flake.java generates are not UUIDs, which may not be optimal for applications that prefer UUIDs (e.g. certain DBMSs like Postgres have special optimized UUID types).
• colossal-squuid has Clojurescript/JS support, while Flake.java is for, well, Java only.#2021-09-3017:20KelvinOne con of colossal-squuid vs Flake.java is performance; these are times measured on Java 11.0.10 on my machine (MacOS High Sierra with an i7 processor):
(criterium.core/bench (squuid/generate-squuid))
Evaluation count : 245862600 in 60 samples of 4097710 calls.
Execution time mean : 247.688222 ns
Execution time std-deviation : 16.444680 ns
Execution time lower quantile : 235.489134 ns ( 2.5%)
Execution time upper quantile : 284.262079 ns (97.5%)
Overhead used : 6.380512 ns
Found 3 outliers in 60 samples (5.0000 %)
low-severe 2 (3.3333 %)
low-mild 1 (1.6667 %)
Variance from outliers : 50.0896 % Variance is severely inflated by outliers
(criterium.core/bench (str (squuid/generate-squuid)))
Evaluation count : 214467540 in 60 samples of 3574459 calls.
Execution time mean : 289.453769 ns
Execution time std-deviation : 21.778366 ns
Execution time lower quantile : 273.336325 ns ( 2.5%)
Execution time upper quantile : 340.385667 ns (97.5%)
Overhead used : 6.380512 ns
Found 8 outliers in 60 samples (13.3333 %)
low-severe 3 (5.0000 %)
low-mild 5 (8.3333 %)
Variance from outliers : 56.7680 % Variance is severely inflated by outliers
So generating a SQUUID is about 7 times slower than generating a Flake, and with string conversion it's about 3.5 4 times slower.#2021-09-3017:45KelvinFor purposes of fair comparison, I rebenched Flake generation on my machine. Generating flakes w/o string conversion was similar to the listed time (35 ns), but w/ string conversion it was better (69 ns).#2021-10-0106:19Ivar RefsdalI will chip in with a small observation:
Flake provides monotonicity per thread, whereas colossal provides monotonicity per JVM.
I doubt that makes a big difference in practice for an application, but I find the latter neater.
I'm no performance expert, but I suppose that (synchronization guarantees) might also explain some of the performance differences.
Side note: μ/log looks like a great and interesting project.
Another option for squuids can be the datomic api. Downsides: closed source. No easy way to get from millis to squuid as far as I know.
https://docs.datomic.com/on-prem/clojure/index.html#datomic.api/squuid#2021-10-0116:42pithylessThank you all for the observations, this is exactly what I was hoping for. I was considering porting flake to CLJS, so colossal library arrives on the scene at a great time. :) (Datomic - and DataScript - both have a squuid function, but unlike flake and colossal, they make no attempt to be monotonic).#2021-10-0116:45pithylessThanks @U02FU7RMG8M and @UGJE0MM0W for following up! gratitude#2021-12-1911:07zeitstein@U02FU7RMG8M Is there a way to obtain the timestamp from an already generated squuid?#2021-12-2014:20KelvinHere's how you can do it in Clojure:
(let [squuid (generate-squuid)
squuid-fst-48-bits (bit-shift-right (.getMostSignificantBits squuid) 16)]
(java.util.Date. squuid-fst-48-bits))
It's just a matter of extracting the first 48 bits and coercing them into a timestamp. For future reference, generate-squuid* returns a map that includes the timestamp used for generation for you.#2021-12-2014:25zeitsteinThank you!#2021-12-2014:57zeitsteinCould I trouble you for the CLJS version? Sorry, really unfamiliar with bit manipulation 😕#2021-12-2119:21KelvinUnfortunately it'll be harder in CLJS since JavaScript UUIDs are stored as strings, so you'll have to do string parsing before you can do anything interesting with them.#2021-12-2122:02KelvinI'm pretty sure you can hack up a solution by using a tool like https://github.com/domske/uuid-tool to parse the UUID into a number array, then perform array manipulations and arithmetic to get an integer that you can convert into a Date object. But it would be ugly.#2021-12-2122:03KelvinAnyways since you did mention you were unfamiliar with bit manipulation, let me explain what's going on in that code snippet:
1. .getMostSignificantBits simply takes the "most significant" half of a UUID, i.e. the ones with the greatest value. (Think of how in the number `12`, the `1` is the "most significant" digit while the `2` is the "least significant" one.) For example, the most significant bits of the UUID `017ddefd-951d-8485-a6cf-6820da6769c3` are `017ddefd-951d-8485`.
2. bit-shift-right literally shifts bits in a bit array to the right; the `16` refers to by how many bits they were shifted. For example, in the bit array `0000111100001111`, if we shift by 4 bits, will become `000011110000`, since the last 4 bits were shifted "off the map." Likewise, bit shifting `017ddefd-951d-8485` will result in `017ddefd-951d` (note that each hex digit is 4 bits long, since that's how many bits are needed to represent any number between `0` and `f`/`15`).
3. The `java.util.Date` has a constructor that accepts a long value (which all Clojure ints are), so if given 017ddefd-951d it instantiates a Date instance with value `2021-12-21T21:55:00.509-00:00`.#2021-12-2214:15zeitsteinThank you so much, really kind of you!#2021-12-2215:46zeitsteinAlright, this seems to do it:
(-> (squuid/generate-squuid)
str
(subs 0 13)
(clojure.string/split "-")
(clojure.string/join)
(js/parseInt 16)
(js/Date.))
Thank you, @U02FU7RMG8M! Are you interested in offering such a function in the library?#2021-12-2215:50KelvinPerhaps. I'll have to think about it since I'd want to keep colossal-squuid minimalistic, but if people would like such a function I'd do it.
Also, I like how for your cljs solution you didn't use any external libs - you kept the spirit of colossal-squuid being dep free!#2021-12-2215:57zeitsteinIt's simple enough to write on your own (having seen it), but the implementation would be several lines (re: minimalism). Datomic/Datascript include such a function, which speaks to demand, perhaps?#2021-12-2216:29zeitsteinWould be happy to provide a PR, if you'd like.#2021-09-3008:40vemvnvd-clojure + lein-nvd - https://github.com/rm-hull/nvd-clojure/blob/1.7.0/CHANGELOG.md - security checker
The Github repo is now named nvd-clojure to emphasize that it's compatible with Lein and deps.edn alike. For both tool chains, the recommended (but not enforced, yet) way of running it is described in https://github.com/rm-hull/nvd-clojure/tree/1.7.0#avoiding-classpath-interference.
This cleaner approach has allowed us to get the issue count down to zero.
Let us know how it works for you - enjoy!#2021-09-3008:51dharriganGreat stuff! Been waiting for this! You may want to consider adjusting the project description for it reads National Vulnerability Database dependency-checker plugin for Leiningen, without also mentioning deps 🙂#2021-09-3012:22steveb8nBrilliant. I've been running this in CI but it wasn't loading the deps. I'll try this new version and will report back. Thanks!#2021-09-3020:51seancorfieldThank you for this @U45T93RA6 A note for the readme: in that section about avoiding classpath interference, it suggests running the tool outside the project folder but if you do that, it complains about directory paths that are on the classpath that it can't find. Maybe filter the classpath to just the .jar files?#2021-09-3023:11vemvHow does the complaining look like? Never seen that
In case it helps, that passage is suggesting something like this:
#!/bin/bash
set -Eeuxo pipefail
NVD_DIR="$PWD/.circleci/nvd"
# calculate a production classpath within the main project:
CLASSPATH="$(clojure -Spath)"
DEPENDENCY_CHECK_COMMAND="clojure -M:nvd $NVD_DIR/nvd-config.json $CLASSPATH"
# cd into a different project defining its own, minimal deps.edn:
cd "$NVD_DIR" || exit 1
# Try a few times in face of flakiness from dependency-check-core:
eval "$DEPENDENCY_CHECK_COMMAND" || eval "$DEPENDENCY_CHECK_COMMAND" || eval "$DEPENDENCY_CHECK_COMMAND"
#2021-09-3023:43seancorfield(! 891)-> clojure -M:nvd "" "$(cd /Developer/workspace/wsmain/clojure && clojure -Sforce -Spath -A:dev:everything)"
Downloading: nvd-clojure/nvd-clojure/maven-metadata.xml from clojars
Execution error (AssertionError) at nvd.task.check/-main (check.clj:134).
Assert failed: The classpath variable should be a vector of simple strings denoting existing files. development/resources
(.exists f)
Because the classpath has relative paths on it and those are relative to the target project directory, not the directory where NVD is run.#2021-09-3023:44seancorfieldPer your README:
For extra isolation, it is recommended that you invoke nvd.task.check from outside your project - e.g. from an empty project, a git clone of this very repo, or from $HOME
#2021-09-3023:44seancorfield☝️:skin-tone-2: That won't work because it checks .exists on the classpath entries and fails if they don't.#2021-09-3023:45seancorfield(it's a minor issue -- running it in the project folder, with a separate classpath works great for me since I do not have anything in :deps in my project's deps.edn -- it's all in aliases)#2021-09-3023:48vemv> That won't work because it checks `.exists` on the classpath entries and fails if they don't.
That makes sense but I wonder how I've managed to never experience this. I have a CI setup where the inner project will receive entries such as test-resources which certainly don't exist within it
Either way I'll fix it#2021-09-3023:51vemv> (it's a minor issue -- running it in the project folder, with a separate classpath works great for me
It's not necessarily the same. If your production classpath defines something that happens to overlap with these https://github.com/rm-hull/nvd-clojure/blob/370428eb6b947136d7c39aefd2161a642cf0801e/project.clj#L6-L29 , your project's versions may win over nvd's, creating opaque issues.
I've certainly observed that under Lein. Not so sure about deps.edn but either way I wouldn't write a 'blank cheque' trusting the build tool's dep/alias resolution to do the right thing. Those are plausibly subject to change.#2021-10-0100:00vemvok so I see what was wrong with the check https://github.com/rm-hull/nvd-clojure/blob/370428eb6b947136d7c39aefd2161a642cf0801e/src/nvd/task/check.clj#L133-L140 - it only checks the first and last items from the classpath. This is not so deterministic.
(The intent of that check was focused on format, not comprehensive file existence, so checking a subset made sense. clojure.spec does this for large collections)#2021-10-0101:44seancorfieldAh, yeah, t.d.a puts paths at the front of the classpath so you're pretty much bound to get a directory that won't exist if you run the command in a different directory.#2021-10-0101:46seancorfieldRe: "blank cheque" above -- I can trust my context at work because the only thing pulled in by default is
:deps ; used by all projects
{org.clojure/clojure {:mvn/version "1.11.0-alpha2"}}
So when I run clojure -M:nvd ... the only things on the classpath is your nvd-clojure via the :nvd alias in my dot-clojure file and Clojure 1.11 Alpha 2.#2021-10-0101:47seancorfieldOh, and I added :nvd to my public dot-clojure file and documented it in the README to encourage more people to use it!#2021-10-0101:50vemvah, got it, so your production classpath is "opt-in" :) interesting.#2021-10-0101:52seancorfieldPolylith. Without :dev, there is nothing 🙂#2021-10-0101:52vemvbtw, from your example -A:dev:everything appears to check more than needed (`dev` in particular). (Might have been simply a one-off experiment?)
Checking vulns for dev tooling can plausibly frustrate people
Either way I'll fix this thing#2021-10-0101:54vemvRe polylith, it might have some value to check nvd for each module (whatever it's called, sorry). If you check only for the final app to be assembled, you'll be testing the final computed classpath. Maybe a module has a vuln that is later overriden.#2021-10-0102:12seancorfield@U45T93RA6 You don't know anything about Polylith 🙂 :dev is the basic set of components (with all their transitive dependencies). It's essentially the "default" in non-Polylith (perhaps non-monorepo) projects.#2021-10-0102:12seancorfieldAnd :everything is simply our equivalent for the non-Polylith code in our repo.#2021-10-0102:13seancorfieldclojure -Spath -A:dev:everything is the production code (with one additional :extra-paths entry -- which doesn't impact NVD CVE checking).#2021-10-0102:14seancorfieldIf I had added :test (Polylith's view of testing), :runner (our legacy equivalent), or :build, then yes, it would have "check[ed] more than needed" and would have included "dev tooling". I'm not stupid -- I know how our repo is setup 🙂#2021-10-0102:16seancorfield(and it actually was quite interesting to see the delta of CVEs in production code vs the stuff that shows up in the dev/test/build tooling -- several were transitive dependencies of HtmlUnit, even with the most recent versions of everything pinned)#2021-10-0102:16vemv:dev has a pretty well-established meaning in the vast majority of clj projects. Do you have an alias called :really-dev or something?
(I'm assuming there's a "dev" and "test" separation e.g. no IDE-like tooling for running test suites)#2021-10-0102:17seancorfieldYeah, Polylith's :dev isn't really like most other project's :dev aliases.#2021-10-0102:18seancorfieldFor us, there's no difference between the union of the individual projects and the :dev "project" view, except one one of the projects has to pin an older version of Jackson due to breaking changes they made that we haven't worked around yet.#2021-10-0102:18seancorfieldAll the other projects have a later version of Jackson with no CVEs.#2021-10-0102:19seancorfieldPolylith's way of running tests is based on the :test alias in each of the projects or the :test alias in the top-level (workspace) deps.edn file.#2021-10-0102:20seancorfieldAnd I use zero IDE tooling inside the project: plain socket REPLs, with some aliases adding stuff from my dot-clojure file (`revealportal:dev/repl`) so none of that is accessible to nvd-clojure.#2021-10-0102:21seancorfieldI guess another option with nvd-clojure would be to use :replace-deps so the :nvd alias will then ignore the project deps altogether. Or install nvd-clojure as a "tool" (in clojure -T terms).#2021-10-0102:38vemvReplace thingies make me a bit nervous (especially in Leiningen) but clojure -T seems inherently decoupled from a project.
(A "constraint" for the readme is that I should keep it minimalistic and generic for both build tools, and not invite newcomers to do the wrong thing. I have pending related work for the readme in this direction)
If you have the chance to contribute the right clojure -T incantation that PR would be most welcome :)#2021-10-0102:54seancorfieldLeiningen is not necessarily a good bar to judge anything against 🙂 For -T, you need a -X compatible entry point. Happy to take a look and send a PR.#2021-10-0106:12seancorfieldOK, PR up for tool install/usage.#2021-09-3010:54borkdudeSCI v0.2.7: a Clojure/Script interpreter, used in #babashka, #nbb and many other projects.
This release focuses on:
- Improvements regarding CLJS compatibility (interop, js literals, printing via *print-fn*)
- Adding more dynamic vars related to printing
- Exposing sci/stacktrace and sci/format-stacktrace for getting a stacktrace
from a SCI exception. This allows you to build an error report like babashka
and similar tools built with SCI.
https://github.com/borkdude/sci/blob/master/CHANGELOG.md#v027#2021-09-3016:14ericdalloclojure-lsp Released https://clojure-lsp.io/ 2021.09.30-15.28.01 with a lot of fixes and improvements, one of them is better feedback during server initialization loading 🚀
For more info check #lsp#2021-09-3020:45just.sultanovThe first release of Secret Keeper has been released. It’s a Clojure(Script) library for keeping your secrets under control.
https://github.com/sultanov-team/secret-keeper/tree/0.3.61#2021-09-3020:49metasoarousThis is great! Thanks for the release! Any idea when this might be considered non-alpha?#2021-09-3020:54just.sultanovThe basic API is stable and no changes are expected.
I want to add Secret’s schema, validator, and ring middleware. It doesn’t affect the current API#2021-09-3020:57metasoarousCool; Thanks!#2021-10-0209:07Chris McCormick@U1QQJJK89 #spire?#2021-10-0108:58borkdudeAnnouncing api-diff , a tool that you can use to compare two mvn libraries or two directories for breaking API changes and deprecations. I'd be happy to receive more features if that's useful to anyone.
https://github.com/borkdude/api-diff#2021-10-0108:59martinklepschOooo, I’ve been wanting to add something like this to cljdoc for ages #2021-10-0201:04Oliver GeorgeThis feels like it’s so close to the idea of spec diffing to detect if a new lib materially changes used surface area. I love it. #2021-10-0515:22bedersI'm beginning to suspect that Borkdude is in reality a whole development team. How can you even???!!11#2021-10-1001:02Sam Ritchiedude has a huge hammock#2021-10-0210:44pezA new version of Calva just out, v2.0.213. It adds support for pure ClojureScript nREPL servers. Yes, there is such a thing now, see #nbb. As I think it might have been a while since we announced a new Calva version, let me include a few items from the top of the changelog:
• Workaround https://github.com/BetterThanTomorrow/calva/issues/1308
• Fix https://github.com/BetterThanTomorrow/calva/issues/1290`calva.highlight.bracketColors`https://github.com/BetterThanTomorrow/calva/issues/1290
• Fix https://github.com/BetterThanTomorrow/calva/issues/1301
• https://github.com/BetterThanTomorrow/calva/issues/1283#2021-10-0221:00Asko NōmmYet another Clojure HTTP router has come to life, with zero dependencies, entirely data-structure based (no macros, no magic) https://github.com/askonomm/ruuter
• Supports direct maps as responses as well as functions
• Does not monkey around with anything else, keeping things as vanilla as possible.
• Works with just about any HTTP server you can throw it, like http-kit, ring + jetty, etc.
• Tiny!#2021-10-0221:49borkdudeThat's awesome. This library might even work in bb with the built-in httpkit server#2021-10-0221:53borkdude@U026NQLSBLH Yep it works!
(require '[babashka.deps :as deps])
(deps/add-deps '{:deps {org.clojars.askonomm/ruuter {:mvn/version "1.0.1"}}})
(require '[ruuter.core :as ruuter])
(def routes [{:path "/"
:method :get
:response {:status 200
:body "Hi there!"}}])
(ruuter/route! routes {:port 8082})
@(promise)#2021-10-0221:56borkdudeI think you could even make this agnostic of httpkit and just provide a documentation example of how to use this with several other ring servers. Keeping it "vanilla" is a nice trade-off.#2021-10-0221:59Asko NōmmAwesome stuff! And you’re right, making it agnostic of http-kit would be as simple as removing the route! fn and making the router fn public, I think.#2021-10-0222:02borkdudeYou might not be aware of this, but people have been asking for a routing solution in bb for a long time but most routing libs come with a lot of baggage so I've resisted adding one so far and recommended people to build their own solution by dispatching on method and uri (using core.match for example). This library offers nice solution to this problem.#2021-10-0222:03borkdudeIn the future bb might switch to a different http server (not sure and will take a lot of time before the old one will be deprecated and eventually removed) but having this routing lib agnostic of server might be nice from that perspective.#2021-10-0223:03Asko NōmmI’m flattered that it could serve a useful purpose! Just pushed a new version 1.1.0 with updated documentation that is entirely decoupled from any HTTP server, and thus has no dependencies at all anymore! 🙂#2021-10-0223:04Asko NōmmExcept for Clojure itself, of course#2021-10-0308:22slipsetThis would be runnable in cljs as well?#2021-10-0314:44Asko NōmmThere’s no reason it shouldn’t be, but I think I have to change the file to .cljc for that? Right?#2021-10-0314:46borkdudecorrect#2021-10-0316:43Asko NōmmPushed an update, should now work with CLJS.#2021-10-0221:44uochanJust released vim-iced ver 3.7.0, Clojure Interactive Development Environment for Vim8/Neovim.
https://github.com/liquidz/vim-iced
Added support for @borkdude 's #nbb nrepl-server.
Also updated instant connecting command to support nbb 🙂
https://twitter.com/uochan/status/1444417505506721793#2021-10-0809:32mkvlr🚀 Just released a very first preview version of Clerk, a local-first notebook built on top of regular Clojure namespaces:
• io.github.nextjournal/clerk {:mvn/version "0.1.164"}.
• Quickest way to play with it is cloning https://github.com/nextjournal/clerk-demo.
• More info can be found in the https://nextjournal.com/mk/clerk-preview
• My favorite notebook is https://storage.googleapis.com/nextjournal-cas-eu/data/8VwPbq6xWQadigCghK7KH5Q3WhUdCNU1d3LCgBnDNUJPyNH1Qw1JfDGFcBmCodHTY8rQDZDTS6UobY3dTLw4suxpGK#/notebooks%2Frule_30.clj 🕹️
Would really appreciate if folks took it for a spin and give feedback in #nextjournal on what can still needs to be improved before its open source release. 🙏:skin-tone-2:#2021-10-0812:15rickmoynihanlooks great and I managed to get it working; but the onboarding from the clerk-demo repo could be a little more straightforward.
It could for example include an alias or user.clj that set it up to work.
Also it looks like some of the notebook files don’t work out of the box; e.g. one of the examples includes jdbc, but it’s not in the deps.edn etc.
Similarly some bits of the getting started snippet aren’t in the demo project; e.g. there’s no src directory. So you could perhaps integrate the getting started guide into the clerk demo repo??#2021-10-0812:17rickmoynihanI’m also curious how it relates to http://nextjournal.com#2021-10-0813:52mkvlrhey, there’s a user.clj here https://github.com/nextjournal/clerk-demo/tree/main/dev#2021-10-0813:53rickmoynihanah cool — I missed it 🙂#2021-10-0814:02mkvlrall notebooks referenced there should run#2021-10-0814:02mkvlrworking on fixing up the rest now#2021-10-0814:13mkvlrhttps://github.com/nextjournal/clerk-demo/commit/c5358a6a372df6f9e93f97e7274ce2d06f81b754#2021-10-0815:30yuhanLooks great! How does this compare to https://github.com/scicloj/notespace? I haven't used much of either but their goals look very similar.#2021-10-0819:22Jakub Holý (HolyJak)Yeah, I would like to know that too.
I would appreciate it if https://nextjournal.com/mk/clerk-preview had a short section about the "syntax", i.e. what the comments rendered by Clerk look like, and a link to the API docs (with fns such as show! and the vl one).
I am very happy to see this, thanks for open-sourcing!#2021-10-0819:32mkvlrClerk does static analysis to build a dependency graph for each form and caches results between subsequent evaluations so it only recomputes things that changed. This allows it to eliminate hidden state issues and a fast feedback loop with file save events as the interface. I believe notespace takes a different approach here receiving commands via the repl on what to evaluate but maybe @U066L8B18 can say more?#2021-10-0819:34mkvlrbesides there seems to be some differences regarding the format (markdown line comments in Clerk vs vectors of strings in Notespace) and the viewer api differs, compare https://github.com/scicloj/notespace/blob/master/test/notespace/v3_experiment1_test.clj with https://github.com/nextjournal/clerk-demo/blob/main/notebooks/viewer_api.clj#2021-10-0819:38mkvlr(btw the notebook format used by Clerk is from https://www.maria.cloud)#2021-10-0819:42Jakub Holý (HolyJak)Thank you!#2021-10-0819:43mkvlrand I’ll add the viewer functions to the readme#2021-10-0819:44mkvlr(there’s currently html, vl, plotly, tex, table, md, code, with-viewer and with-viewers. https://github.com/nextjournal/clerk-demo/blob/main/notebooks/viewer_api.clj is the best reference until then#2021-10-0811:53jerger_at_ddaJust released our new c4k-jira module.
A k8s setup for small jira installations on a cheap single app cluster. We use this installation in production. Provider independent backup is included - there is no lock in 🙂
https://gitlab.com/domaindrivenarchitecture/c4k-jira
#k8s #devops #jira#2021-10-0813:09borkdudebabashka 0.6.2 babashka
https://github.com/babashka/babashka/blob/master/CHANGELOG.md#062
Various bugfixes and a few new features!#2021-10-0813:10ericdallocool, I was about to report something similar to #45#2021-10-0813:13Karol WójcikCool. I have already stumbled upon the cider hanging bug.#2021-10-0911:35Johan ThorénI've just released https://github.com/johanthoren/bibcal/releases/tag/1.0.0 - a Clojure (graal-vm native-image) command-line app to calculate the calendar based on the Bible and the 1st book of Enoch. It's inspired by HebCal, but based on https://github.com/johanthoren/luminary which bases calculations on the sun, moon, and stars - instead of a mathematical formula.
https://github.com/johanthoren/bibcal#2021-10-0912:20borkdudeFun project :)#2021-10-0912:28Johan ThorénThanks. It's fun for me! Although I realize the audience will probably always be quite slim. At least I'm solving problems for myself... 🙂#2021-10-0913:14pezSo when are you going to find the Graal? 😃#2021-10-0913:20Johan ThorénNot sure about that, but there seems to be quite a few Clojurians loving the native-image possibilites!#2021-10-0913:22borkdude@U02DW53HCSE We sure do in #graalvm and #clj-easy#2021-10-0913:23borkdudeAnd of course in #babashka too#2021-10-0913:25borkdudeCome to think of it, I think your script could be written as a bb script as well :)#2021-10-0913:29Johan ThorénFor sure. But I consider my eventual target audience to be non-technical, and as such I want to ship a single exe file without any deps. In the future that might include a modest UI as well.#2021-10-0913:31borkdudemakes sense#2021-10-0913:31borkdudeany ideas about UI + graalvm already?#2021-10-0913:37Johan ThorénNo, I haven't even looked into it yet. It's somewhere on the 3.0 horizon (if at all possible).#2021-10-0913:38Johan Thorénhttps://www.bibcal.org will most likely be the place where I add pointy-clicky-features instead.#2021-10-0915:21littleliNice! @U02DW53HCSE I added it to clojure scoop bucket. It now shares the spot among other great tools members of clojure community produce.
https://github.com/littleli/scoop-clojure/pull/164#2021-10-0916:41Johan ThorénKudos! I appreciate it! Didn't know about the dependency on extras/vcredist2015, what is that all about?#2021-10-0916:48littlelisorry, but I'm not an expert on C++ runtime dependencies. It's a library that all the native image build binaries on windows depend on at runtime.
https://www.microsoft.com/en-us/download/details.aspx?id=48145#2021-10-0916:49borkdudethis is just a c++ library that graalvm depends on#2021-10-0916:49borkdudemost OSes have this available but Windows hasn't always got this#2021-10-0916:49borkdudebut it's a very common dependency that many Windows programs need#2021-10-0917:00Johan ThorénOk. Good stuff! I know pretty much nothing about Windows, so I'm happy someone does! I've added a note about Scoop Clojure to the installation notes in the README. Do I need to do anything to keep it up-to-date?#2021-10-0917:50littleliJust do as nice release artifact on github as it is now. Scoop is able to detect new releases on github and autoupdates manifest automatically.#2021-10-0918:04Johan Thorén@UBLU3FQRZ That's nice. The release is done through a GH workflow so that will stay essentially the same for the foreseeable future.#2021-10-0918:05littleli:thumbsup:#2021-10-1017:59lreadrewrite-clj v1.0.699-alpha - Rewrite Clojure code and edn
https://github.com/clj-commons/rewrite-clj/blob/main/CHANGELOG.adoc#v10699-alpha
• rewrite-clj v1 minimum Clojure version is now v1.8.0 (was formerly v1.9.0)
• @borkdude is now a co-maintainer of rewrite-clj! Woot! Woot!
It has been a while since I posted a rewrite-clj release to this channel, see the change log for details of other rewrite-clj v1 changes.
Drop by in #rewrite-clj to chat.#2021-10-1104:15Alex Miller (Clojure team)tools.build v0.6.1 515b334 is now available:
• compile-clj - TBUILD-20 - fix regression with including class dir on classpath
• copy-dir - add option to copy but not replace binary files by extension#2021-10-1105:57plexusorg.flatland/ordered 1.15.10 is out, with thanks to clj-commons. Ordered offers map and set variants that maintain insertion order. This release adds a ClojureScript implementation of the map type. (follow-up in #clj-commons).#2021-10-1110:15ingesolhttps://github.com/ingesolvoll/glimt, an FSM interface for https://github.com/day8/re-frame-http-fx, has had its first release. It’s implemented using https://github.com/lucywang000/clj-statecharts.#2021-10-1116:11hlshipcom.walmartlabs/lacinia 1.0 and lacinia-pedestal 1.0
Lacinia is an open-source implementation of the GraphQL specification, in Clojure.
GraphQL is an outstanding approach to getting diverse clients and servers exchanging data cleanly and efficiently.
GitHub repo: https://github.com/walmartlabs/lacinia
Documentation: https://lacinia.readthedocs.io/en/latest/
It's been our goal since the initial release of Lacinia in 2017 to produce a GraphQL library that
was stable, performant, easy to use, and true to the specification. We at Walmart, along with a number
of outside contributors, have spent the last ten months adding new features, overcoming limitations, and improving
performance, while deploying these libraries to servers handling millions of requests per day.
Featured changes in 1.0:
- detection of infinite cycles due to fragments calling themselves
- merging subtrees caused by fragment selections
- schema navigation: expose the compiled schema's contents via the select-type API
lacinia-pedestal adds support for accessing Lacinia GraphQL as an HTTP endpoint
GitHub repo: https://github.com/walmartlabs/lacinia-pedestal
Documentation: https://lacinia-pedestal.readthedocs.io/en/latest/
1.0 contains a small bug fix#2021-10-1202:13mauricio.szaboSo, years ago I made a project as a joke. But then, a friend started to work with Ruby and was missing Clojure libs. So I decided to see how far the two languages can co-exist: presenting Clojuby: https://gitlab.com/mauricioszabo/clojuby
It's quite alpha, quite new, and probably will change the API, but it kinda works (even with Rails)! Your app needs to run on JRuby, but other than that almost everything you can do in Ruby is supported!#2021-10-1202:14mauricio.szaboI also made a test playground for Rails here, querying things from ActiveRecord and rendering with hiccup (oh my!): https://gitlab.com/mauricioszabo/clojuby-on-clails-example#2021-10-1207:29Carsten BehringWhen it becomes more stable, maybe we can add it here: https://github.com/behrica/clj-py-r-template
PRs welcome#2021-10-1207:42plexusFun fact, http://lambdaisland.com has been using JRuby since 2016 to run the Kramdown markdown parser#2021-10-1221:22mauricio.szabo@U7CAHM72M sure! To be honest, I'm not sure where to go with this library (I mean, originally it was supposed to be a joke, so it's already way past what I originally intended 😄).
I talked with some people that miss some Clojure killer libs like Malli, Pathom, Clara-Rules, Datalog dbs, etc and it seems that a good fit would be to slowly replace a Rails app running at JRuby with fragments in Clojure (you can hook into some controllers and add make it respond to a Clojure code instead, Ruby being as dynamic as it is) so that's one of the possibilities.
It's still quite lacking on interop (you have to use rb/send or rb/eval to evaluate things) and some patterns still don't work well (for example, Rails' params don't map to Clojure maps) but it's a start!#2021-10-1212:05Jakub Holý (HolyJak)defdecoratorhttps://gist.github.com/holyjak/81c6e439192da00c8106cc3ce960b8f0#file-defdecorator-clj-L63 (wrappers) for Java interfaces. Example output (elided):
(binding [*print-meta* true] (prn (macroexpand-1 '(defdecorator WrappedConnection java.sql.Connection))))
; =>
(deftype WrappedConnection [^java.sql.Connection target]
java.sql.Connection
(abort [_ arg0] (. target abort arg0))
(beginRequest [_] (. target beginRequest))
...
;; the following are type hinted due to overloaded arities:
(^java.sql.PreparedStatement prepareStatement [_ ^java.lang.String arg0 ^int arg1] (. target prepareStatement arg0 arg1))
(^java.sql.PreparedStatement prepareStatement [_ ^java.lang.String arg0 ^ints arg1] (. target prepareStatement arg0 arg1))
(^java.sql.PreparedStatement prepareStatement [_ ^java.lang.String arg0 ^\"[Ljava.lang.String;\" arg1] (. target prepareStatement arg0 arg1))
...
java.sql.Wrapper
(isWrapperFor [_ arg0] (. target isWrapperFor arg0))
(unwrap [_ arg0] (. target unwrap arg0)))#2021-10-1220:55tengstrandI’ve just released https://github.com/polyfy/polylith/releases/tag/v0.2.13-alpha of the poly tool. The highlights are:
• A new user friendly shell command with support for history and auto-complete.
• The poly tool documentation is improved and has moved to https://polylith.gitbook.io/poly.
• We have switched to tools.build, thanks to @seancorfield’s excellent PR.#2021-10-1304:24Asko NōmmAnnouncing the first release of https://github.com/askonomm/shh (compiled to native binaries with Graal VM)
• Stores everything in a .shh.edn file in the user home directory.
• Copies passwords to clipboard for quick usage. The whole point of it really is as-fast-password-getting-as-possible for those who always have a CLI open, like me.
• Whenever creating a password, it will prompt for what is the desired length of the password, so you can use it with restrictive systems.#2021-10-1519:25littleliif you build a native windows binary let me know, I'll add to scoop-clojure.#2021-10-1601:07Asko NōmmI would love to build a windows binary, but I don’t have the ability to test with Windows, which is why I haven’t done it. Windows does some things differently (like file paths) that might break for example, and I have no way of knowing.#2021-10-1415:51Eddú Meléndezone year ago, https://github.com/paketo-buildpacks/leiningen was released. Today, I am happy to announce that https://github.com/paketo-buildpacks/clojure-tools has been released. So, if there is a deps.edn file at the root directory then just running pack build tododemo --builder will produce a image. By default, it is using java 11. want java 17? then pack build tododemo --builder "" -e 'BP_JVM_VERSION=17.*' or you may want to try another vendor? then pack build tododemo --builder "" --buildpack --buildpack
In order to run the image, perform docker run --rm --tty --publish 8080:8080 -e JAVA_TOOL_OPTIONS="-XX:MaxMetaspaceSize=100M" tododemo
For some reason, in java 11 we need to increase the metaspace but doesn’t happen with java 8 and 17 and alibaba dragonwell. There is already an https://github.com/paketo-buildpacks/libjvm/issues/88 for that.
Paketo Buildpacks have some default values but you can override them. Check the samples https://github.com/paketo-buildpacks/samples/tree/main/java/deps and https://github.com/paketo-buildpacks/samples/tree/main/java/tools-build#2021-10-1518:57fogus (Clojure Team)New Cognitect Labs aws-api service APIs available!
CHANGES
- new endpoints version 1.1.12.88
- new AWS service API available (services version v814.2.1008.0): account, cloudcontrol, grafana, voice-id, wisdom
README: https://github.com/cognitect-labs/aws-api/
API Docs: https://cognitect-labs.github.io/aws-api/
Changelog: https://github.com/cognitect-labs/aws-api/blob/master/CHANGES.md
Upgrade Notes: https://github.com/cognitect-labs/aws-api/blob/master/UPGRADE.md
Latest Releases of api, endpoints, and all services: https://github.com/cognitect-labs/aws-api/blob/master/latest-releases.edn#2021-10-1617:00Joshua SuskaloAnnouncing https://github.com/IGJoshua/coffi, a foreign function interface for Clojure on JDK 17.
The library includes features like:
• wrapper functions that make native code feel like Clojure code
• automatic serialization and deserialization to marshal data between the native world and Clojure
• support for callbacks and function pointers
• support for low-level wrappers to manage native allocations and avoid marshaling costs
• the best performance on primitive types of all FFI libraries currently available in Clojure (struct benchmarks have not been compared to other options yet)
• a data model to support importing a library's whole interface as data (with some limitations)
https://github.com/IGJoshua/coffi
As a test for the library, I've wrapped https://github.com/IGJoshua/glfw-clj and validated it works as intended. If you start wrapping something and find any errors, please open an issue, or come say hi in #coffi!#2021-10-1619:35viestiThis is really neat, thank you 🙂#2021-10-1620:20borkdudeLooks really impressive, congrats !#2021-10-1620:20Joshua SuskaloThanks!#2021-10-1807:10roklenarcicdid JDK 17 get a new FFI? I know only about JNI, which requires some generated java files and other stuff.#2021-10-1813:31Joshua SuskaloYes, JDK 17 has an incubator release of Project Panama. https://openjdk.java.net/projects/panama/#2021-10-1813:32Joshua SuskaloIt's an FFI which requires no native code to be written and can just link against dynamic libraries at runtime. It's pretty cool, but since it's an incubator the API may still change before it's added to java.base. @U66G3SGP5#2021-10-1813:41roklenarcicvery interesting#2021-10-1819:07viestiwent and tried out using OSX system api (CoreWLAN via objc) with coffi, worked nicely :) https://github.com/viesti/osx-coffi#2021-10-1819:13borkdudeThat looks awesome. I'm also happy to see that exported clj-kondo configs are being put to good use.#2021-10-1913:46Joshua SuskaloHey @U06QSF3BK I looked at your repo on a call with some of my friends trying to get it working last night, but we kept running into issues. We're not sure, but it might be that the macbook we tried it on was using MacOS 12. Are you actually on OS 10? I'm also curious, with dlopen, was there a reason you couldn't use coffi.ffi/load-library? It allows you to specify an absolute file path.#2021-10-1913:46Joshua SuskaloIn any case, it's really cool that it worked for you!#2021-10-1914:12viestiI'm on 11.6, I think the library reference stuff got changed in Big Sur#2021-10-1914:14viestiI didn't try JNA on my machine yet, but there is something funny in how System.loadLibrary works in Big Sur, and found from some Python ctypes Stack Overflow post the form where the library name passed to dlopen is <path>/Versions/Current/<libname>#2021-10-1914:14viestiso yeah, probably different for older OSX versions#2021-10-1914:14Joshua SuskaloAh, okay. Thanks!#2021-10-1806:04AbhinavAnnouncing my first clojure project https://github.com/AbhinavOmprakash/luna. luna is a DSL that translates to regex.
luna is still in beta, but supports a decent portion of regex.
I'm open to contributions and suggestions.
https://clojars.org/org.clojars.abhinav/luna
https://github.com/AbhinavOmprakash/luna#2021-10-1807:22borkdudeSimilar goal to https://github.com/lambdaisland/regal?#2021-10-1808:31AbhinavI guess. I discovered regal when I was almost done with the project. But the syntax of regal is quite different from luna.#2021-10-1809:21Asko NōmmAwesome work!#2021-10-1813:53Noah Bogartlove to see different approaches to “readability of regex”. it’s a complex topic and it’s fun to see how folks tackle it#2021-10-1815:11Jakub Holý (HolyJak)#find-my-lib is useful to search for prior art :)#2021-10-1815:18Abhinav@UEENNMX0T I'd love to hear your feedback on my approach 🙂#2021-10-1815:19Abhinav@U0522TWDA I didn't know about this, thanks!#2021-10-1909:00Toby ClemsonAnnouncing https://github.com/logicblocks/salutem, a system for defining and maintaining a collection of health checks, with support for:
• both realtime and background checks
• a registry for storing, finding and resolving checks
• an asynchronous maintenance system for ensuring that the results of checks are kept up-to-date according to their definition
See the https://logicblocks.github.io/salutem/getting-started.html, https://logicblocks.github.io/salutem/index.html and https://go-atomic.io/2021/09/30/health-checks.html for more details.#2021-10-1917:55borkdudeclj-kondo 2021.10.19 clj-kondo
https://github.com/clj-kondo/clj-kondo/blob/master/CHANGELOG.md#20211019
New
• New optional linter: warn on missing `gen-class` if namespace has `-main` fn https://github.com/clj-kondo/clj-kondo/issues/1417. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#main-without-gen-class.
• Detect arity mismatches for functions defined with `def` https://github.com/clj-kondo/clj-kondo/issues/1408
• Type inference improvements for `def` + `fn` combination https://github.com/clj-kondo/clj-kondo/issues/1410
• Local `fn` type inference https://github.com/clj-kondo/clj-kondo/issues/1412
• Analysis: allow user to request all or specific metadata be returned https://github.com/clj-kondo/clj-kondo/issues/1280 (https://github.com/lread)
• rseq called on other type than vector or sorted-map now gives type error https://github.com/clj-kondo/clj-kondo/issues/1432
Enhanced / fixed
• Fix false positive with ns-unmap https://github.com/clj-kondo/clj-kondo/issues/1393
• Support custom-lint-fn with `.cljc` https://github.com/clj-kondo/clj-kondo/issues/1403
• Allow reader conditional in metadata https://github.com/clj-kondo/clj-kondo/issues/1414
• Analysis: add `:from-var` in higher order call https://github.com/clj-kondo/clj-kondo/issues/1404
• Dedupe linted files https://github.com/clj-kondo/clj-kondo/issues/1395 (https://github.com/ericdallo)
• Add `:duplicate-ns` to duplicate-require linter output https://github.com/clj-kondo/clj-kondo/issues/1421 (https://github.com/ericdallo)
• if-let / `if-some` with invalid arity no longer warn https://github.com/clj-kondo/clj-kondo/issues/1426
• Analysis: spport for defn 2nd attr-map, :doc derivation fixes (https://github.com/lread)
• Fix parsing of trailing metdata map https://github.com/clj-kondo/clj-kondo/issues/1433 (https://github.com/lread)
Thanks @lee and @ericdallo for the help.#2021-10-1918:12vnczWill Calva automatically download the latest version on the next start? @U0ETXRFEW#2021-10-1918:12borkdude@U015VUATAVC it will once @ericdallo publishes a new version of #lsp#2021-10-1918:12ericdallonope, needs new clojure-lsp release which should come soon this week#2021-10-1918:13ericdalloI'm just focusing on fix a bug then I should release soon#2021-10-1918:13borkdudethere is also a standalone clj-kondo plugin available for VSCode if you want a preview ;)#2021-10-1921:50jumarThanks again for a very quick turnaround on rseq !#2021-10-1922:10wilkerlucioHello everyone! Today I'm pleased to announce a new release of Pathom 3! This release contains some fixes for dynamic resolvers, and the brand new parallel processor. This processor is faster and less resource intensive than the ones in Pathom 2, and you can expect a good bump in performance when compared to it (real benchmarks will be taken and share in a blog post soon)! Check new docs for the parallel runner at https://pathom3.wsscode.com/docs/async/#parallel-process
Release: https://clojars.org/com.wsscode/pathom3
Changes in this release:
• Fix foreign mutation on async runner
• Remove viz request snapshots to allow multiple connectors on the same meshed graph
• Fix the flow of params on foreign-ast
• Fix nested dependency process
• Infer output shape in constantly resolver
• Parallel processor 🎉#2021-10-2010:08pezDear everybody: A new version of Calva just out, v2.0.220. It adds a proper Paredit Kill Right command, bound to ctrl+k. Thanks @amar! gratitude There is also a Paredit Select Right that will push “kill right” ranges on the selection stack. See https://calva.io/paredit/ for demos of both.
> Hacktoberfest
> albeit not proper nor done
> for CIDER distilled
[2.0.220] - 2021-10-20
• https://github.com/BetterThanTomorrow/calva/issues/1024
[2.0.219] - 2021-10-19
• https://github.com/BetterThanTomorrow/calva/issues/1348
[2.0.218] - 2021-10-18
• https://github.com/BetterThanTomorrow/calva/issues/1346
• https://github.com/BetterThanTomorrow/calva/issues/1345
[2.0.217] - 2021-10-17
• https://github.com/BetterThanTomorrow/calva/issues/1340
• https://github.com/BetterThanTomorrow/calva/issues/1333
• https://github.com/BetterThanTomorrow/calva/issues/1231
• Fix: https://github.com/BetterThanTomorrow/calva/issues/1332
[2.0.216] - 2021-10-10
• Fix: https://github.com/BetterThanTomorrow/calva/issues/1329
• Fix: https://github.com/BetterThanTomorrow/calva/issues/872
[2.0.215] - 2021-10-10
• https://github.com/BetterThanTomorrow/calva/issues/1324
[2.0.214] - 2021-10-06
• https://github.com/BetterThanTomorrow/calva/issues/1001
• https://github.com/BetterThanTomorrow/calva/issues/1311
• Fix: https://github.com/BetterThanTomorrow/calva/issues/1310
• https://github.com/BetterThanTomorrow/calva/issues/1319
[2.0.213] - 2021-10-02
• Workaround https://github.com/BetterThanTomorrow/calva/issues/1308
#2021-10-2012:23pezAnyone who appreciates my gratitude gratitude is super welcome to retweet this one: https://twitter.com/pappapez/status/1450768813188861959#2021-10-2012:45Dainius Jocashttps://github.com/dainiusjocas/clj-jq 1.1.3 released https://github.com/dainiusjocas/clj-jq/releases/tag/v1.1.3#2021-10-2012:56borkdudeIt's already a month ago since I last announced changes in #nbb, a babashka-like tool for CLJS scripting on Node.js.
New additions in v0.0.76-v0.0.107:
• console REPL. If you have Node.js simply type npx nbb and you will be dropped into a REPL.
• Socket server REPL
• nREPL server for development with Calva
• Add clojure.test so you can now use nbb to develop e.g. browser tests using puppeteer or playwright
• Support for reader conditionals using :org.babashka/nbb
• Print nicer stacktrace when error happens (similar to bb)
• Misc. fixes and enhancements.
https://github.com/borkdude/nbb
Join #nbb for more information.#2021-10-2013:40ericdalloclojure-lsp Hello clojurians!
New https://clojure-lsp.io/ release with fixes, performance improvements and new features!
Probably one of the major changes is the replace of sqlite with #datalevin as the analysis cache db implementation, improving clojure-lsp startup, thank you @huahaiy for the huge help on this! 🚀
Also, we have https://clojuredocs.org/ integration 🎉 showing docs, examples, notes and see-alsos of symbols directly on your editor when hovering a symbol!
For more information, check #lsp
Have a great code ;)#2021-10-2014:24rafaeldelboniAwesome news!
Out of curiosity, do you have the startup time difference of the between versions?#2021-10-2014:26ericdalloonly on specific moments: 10% finding cache and 95%#2021-10-2014:26ericdallothat's when we read and save db cache#2021-10-2015:55respatializedIf the code is cached in a datalog DB, how far removed is clojure-lsp from something like codeq? :thinking_face:
https://github.com/Datomic/codeq#2021-10-2016:00ericdallonot sure @UFTRLDZEW :thinking_face:#2021-10-2018:41Karol Wójcik@UKFSJSM38 how can I enable docs?#2021-10-2018:48ericdallo@UJ1339K2B are you using doom-emacs? what editor are you using?#2021-10-2018:49ericdalloif emacs: (setq lsp-ui-doc-enable t) , if using doom-emacs just type K#2021-10-2018:49Karol Wójcikdoom-emacs 😄#2021-10-2018:50rafaeldelboniHey the startup time changed from 10 seconds to 3 in a big project here, cool!#2021-10-2018:52Karol WójcikHere are configuration for lsp. K shows the following buffer
(setq lsp-ui-sideline-enable t
lsp-ui-doc-enable t
lsp-enable-symbol-highlighting nil
+lsp-prompt-to-install-server 'quiet
gc-cons-threshold (* 100 1024 1024)
read-process-output-max (* 1024 1024)
treemacs-space-between-root-nodes nil
lsp-headerline-breadcrumb-enable nil
company-idle-delay 0.5
lsp-idle-delay 0.5
company-minimum-prefix-length 1
lsp-lens-enable nil
lsp-enable-file-watchers nil
lsp-file-watch-threshold nil
lsp-signature-auto-activate t
lsp-enable-indentation nil
lsp-enable-on-type-formatting nil)
#2021-10-2018:53ericdalloAmazing @UMMMKKADU :D#2021-10-2018:54ericdalloOh @UJ1339K2B I'm actually releasing a fix for the clojuredocs, I made a bug on the native image 😅 forgot to add to enable the https protocol#2021-10-2018:59Karol WójcikBtw clojure-lsp wrongfully is quesing the project root.
I'm in /Workspace/Personal/Clojure/holy-lambda, but the clojure-lsp guessed the project root to be /Workspace/Personal/Clojure.. Hmm#2021-10-2018:59Karol Wójciklsp-restart-workspace: There are no active servers in the current buffer
LSP :: Guessed project root is ~/Workspace/Personal/Clojure
LSP :: Connected to [clojure-lsp:646152].
#2021-10-2019:03Karol WójcikDunno why, but every project I visit lsp incorrectly guesses the project root.#2021-10-2019:22Karol WójcikFixed the last error by using lsp-workspace-folders-add 😄#2021-10-2019:26ericdalloSorry for the delay, but yeah, you need to lsp-workspace-folders-remove and then lsp and choose the correct dir#2021-10-2019:42Karol WójcikDon’t sorry :D i can wait ;)#2021-10-2113:20ericdalloclojruedocs fix released !#2021-11-0113:16Otto Nascarelladalhe eric!!!#2021-10-2018:15Felipe ReigosaHey guys, there's a new video for my game MockMechanics written entirely in clojure. In the video I show how I created that 4 color memory game (Simon) without writing any code. https://www.youtube.com/watch?v=tM8ljtPA0ZM&ab_channel=MockMechanics What do you think?
Here's a preview:#2021-10-2023:13fingertoeI hope to really enjoy a conference talk about this someday. Cool work!#2021-10-2106:32pezAgree about how cool this is! It twists my mind a bit inside-out trying to unpack what is really going on. That said, I also note that this is a closed source project, and I think the updates about it fits better in #news-and-articles. Of course, if the source is opened, that would be even more awesome. 😃#2021-10-2110:30Felipe ReigosaThanks guys. @U0ETXRFEW the plan was always to make it open source eventually, I just wanted to organize a few things before I made it open source and invited people. I'm very, very close so in the next couple of weeks I'll create the github project. It's a very fun project to work on and there's still plenty to be done, in fact more than one person can do at this point, so I'll be very glad to get your help if you want to.#2021-10-2111:13pezThat sounds absolutely fabulous! I know all about “more than one person can do”, and am fortunate to have a team mate, and then lots of team mates in the “extended” team. I’m looking forward to make a video about MockMechanics development workflow using #calva We don’t have a huge following of the CalvaTV channel, but it is probably a very good audience for a super cool project looking for contributors.#2021-10-2111:24Felipe ReigosaThat sounds great 😁👍#2021-10-2022:50Asko Nōmmhttps://github.com/askonomm/shh version 2021.10.20 is out:
• Now prompts for password complexity whenever creating a password, further enabling usage with restrictive systems
• Has Windows support thanks to @abhinav.omprakash10
• A bunch of other quality of life improvements, such as when using Shh from a headless environment on Linux it will display the password instead of copying to clipboard, because xclip requires a display.#2021-10-2105:40tatuta simple XTDB inspector https://github.com/tatut/xtdb-inspector web UI... you can browse documents, view the history or run (and save) queries. Also shows XTDB indexing metrics.#2021-10-2108:46tatutideas welcome, what could the inspector do more#2021-10-2108:44henrikhttps://github.com/fluent-development/heroicons-clojure is a Fulcro/Reagent/Re-frame compatible packaging of the icons from https://heroicons.dev/.#2021-10-2108:45tatutthere's also https://github.com/tatut/re-svg-icons#2021-10-2119:58phronmophobichttps://github.com/phronmophobic/clj-media. A wrapper around https://github.com/cnuernber/avclj. Currently, only basic support for video and gifs, but more to come! Here's an example from https://github.com/phronmophobic/clj-media/tree/main/examples/codetogif#2021-10-2120:06borkdudeThis gives a whole new meaning to defrecord#2021-10-2120:08lreadMagical! One thing that I thought might be interesting is to somehow automatically capture terminal screenshots (stills not animated gifs) for the output of a single command. I thought this might be useful for tools that have pretty output and want to keep their screenshots in their docs up to date. Tools like maybe https://github.com/greglook/puget, https://github.com/lambdaisland/deep-diff2 or even https://github.com/lread/status-line. Would your library help with this kind of thing?#2021-10-2120:12phronmophobicThat's an interesting idea. You still need to draw the frames, but I think I have an ansi terminal renderer lying around somewhere. Let me check!#2021-10-2121:52phronmophobic@UE21H2HHD Just checked. The terminal renderer I have isn't in an easy to use state at the moment. For static screenshots, clj-media seems like overkill. It seems like you could use any terminal renderer. For example:
• applescript + terminal + screencapture
• xterm.js + puppeteer + https://pptr.dev/index.html#?product=Puppeteer&version=v10.4.0&show=api-class-page#2021-10-2121:58borkdudeyou know about https://asciinema.org/ as well right?#2021-10-2123:01phronmophobicI did not. They even have a cljc virtual terminal. I might have to play around with this at some point, https://github.com/asciinema/vt#2021-10-2200:52lreadThanks for taking a peek @U7RJTCH6J - and also for the ideas!#2021-10-2208:22rickmoynihan@U7RJTCH6J looks like a nice little project…
FYI though it looks like you may need to license it as GPLv2 rather than EPL as avclj is GPLv2 not LGPL.
I’m not sure why it isn’t LGPL but it seems FFMpeg has parts of the library that are GPL licensed and other parts that are LGPL. It may be that avclj could be licensed as either depending on what functionality others use 🤷#2021-10-2209:12Anmol Ahuja"Hi Clojurians,
I represent Skuad, an employment platform that helps companies build & manage their globally distributed remote teams. We're actively looking for {PHP Developers} for our client Shiprocket who've built India's first automated shipping solution for eCommerce.
This is a fully remote opportunity.
If you're interested, you may directly apply on this link - https://allremote.jobs/jobs/sleek-tech-full-stack-software-engineer-569e96aa-aad5-4915-b8a5-27b8988f5c02"#2021-10-2209:15pezYou shouldn’t be advertising for PHP Developers on this slack. Deleting this and deactivating your account since you spammed us with four of these!#2021-10-2209:19pezOMG! They posted more while I was deleting. Maybe it was a bot? But now deactivated. Let’s hope they don’t keep creating accounts.#2021-10-2209:21Geoffrey GaillardLooked like someone copying/pasting pre-made messages.#2021-10-2210:07pezVery clumsily too. What on earth could have been the purpose? All I can think of is that they bet on that the links will be published outside this slack automatically. Which I think actually can happen so I raised a concern in #clojureverse-ops#2021-10-2211:50dmegasAt least Zulip seems to not have picked them up 👌#2021-10-2211:51dmegasOr maybe the deletions cascade to Zulip#2021-10-2211:53pezAh, yes. That’s probably how the Clojurians log works as well. I think I’ve seen something about how the logging is quite non-trivial.#2021-10-2216:57seancorfieldIf a message is deleted within a certain window of it having been posted, the Zulip mirror bot will catch the delete as well as the original post. I think it's as long as the mirror bot has the original message in memory...#2021-10-2511:33Abhinavhttps://github.com/AbhinavOmprakash/sisyphus is a simple task schedule that can run clojure functions periodically.
Features
• It runs all the tasks in the background so you can keep working in the repl, after starting sisyphus.
• Dynamically add and remove tasks while sisyphus is running.
• Exceptions thrown by tasks are logged.
• Print logs to console or write to EDN files.
If you have ideas and suggestions for improvements do let me know.
Clojars
https://clojars.org/org.clojars.abhinav/sisyphus#2021-10-2512:00Jivago Alves@U02CVMEFEUF Thanks for sharing it! I was wondering how your library compares to https://github.com/overtone/at-at/blob/master/src/overtone/at_at.clj#L2 or https://github.com/jarohen/chime/blob/master/src/chime/core.clj#L8 especially because they use a https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/ScheduledThreadPoolExecutor.html. Are you using for different use cases?#2021-10-2512:24Abhinavtbh I haven't seen those libraries, but chime looks interesting.
I think I might use a https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/ScheduledThreadPoolExecutor.html in the next release.
But for now, the number of threads spawned is not limited (?) which has the upside of ensuring your task runs at the time it was scheduled (if resources permit).
Also, sisyphus has an arguably friendlier interface. (three important functions). It may not give you the fine-grained control of chime, tho. But chime seems like a very mature library :)#2021-10-2517:58pezAwesome name!#2021-10-2518:36oliyLove the name too#2021-10-2520:06Jakub Holý (HolyJak)#find-my-lib is a good place to check 🙂#2021-10-2513:14Carsten Behringhttps://github.com/behrica/opencpu-clj is simple package to access an https://www.opencpu.org/ server
Features:
• supporting all OpenCPU operations in an idiomatic way
Clojars
https://clojars.org/opencpu-clj#2021-10-2518:20phronmophobicBased on a suggestion from @lee and a tip from @borkdude, I wrote a scriptable, embeddable, terminal emulator , https://github.com/phronmophobic/membrane.term#2021-10-2518:27lreadWowzers! Looking forward to checking this out!#2021-10-2518:30phronmophobicLet me know if you run into any issues. The https://github.com/phronmophobic/membrane.term#run-a-headless-terminal-and-take-a-screenshot section should cover the use case you mentioned#2021-10-2518:30lreadSweet!#2021-10-2518:53Ben SlessIncredible. It's almost no code at all. Powerful tool you made there 🙂#2021-10-2518:57phronmophobichttps://github.com/asciinema/vt does a lot of work, but it's not much code either! Since it's all just data, it was really easy to work with. I can't imagine it would be that much fun integrating with a virtual terminal emulator in another language.#2021-10-2702:46genekimSo cool, @U7RJTCH6J !!#2021-10-2607:02bozhidarclj-refactor.el and refactor-nrepl 3.0 are out! You can read more about the new releases here https://metaredux.com/posts/2021/10/26/clj-refactor-3-0.html#2021-10-2607:44vemvAs the post says, there’s no shortage of ideas for what we can improve :)
Expect various fixes and performance improvements short- and medium-term.
The main bottleneck remains being tools.analyzer (as it does for e.g. Eastwood) but recently I've been hammocking a safe way to parallelize it. I've done similar parallelization work in a tools.namespace fork so I'd be pretty confident that it will work.#2021-10-2608:25Ben Sless@U45T93RA6 do you have some profiling data for tools.analyzer?#2021-10-2608:27vemvI profile it from time to time with different tools depending on the task at hand
Anything specific you're chasing?#2021-10-2608:27Ben SlessIf you have flame graph for a big chunk of analysis (like an entire file) it would be nice#2021-10-2609:04vemvHere's the minimally viable snippet for reproducing what refactor-nrepl ultimately does with tools.analyzer (intentionally skipping its caching layer):
(let [your-ns 'clojure.string]
(time
(do
(#'refactor-nrepl.analyzer/build-ast your-ns (ns-aliases your-ns))
nil)))
#2021-10-2609:55Ben Slessbuild-ast just calls tools.analyzer or is there anything happening in between?#2021-10-2610:13vemvnothing of interest, it offloads to t.ana pretty directly https://github.com/clojure-emacs/refactor-nrepl/blob/a3f9de809b1246101786ec6160df3b8c66585f74/src/refactor_nrepl/analyzer.clj#L74-L93#2021-10-2611:14Ben SlessCool, I'll try to poke at it later today#2021-10-2612:43ericdalloAwesome project, congrats fro the awesome work!#2021-10-2613:15imreLove the clean-ns fix#2021-10-2916:03Ben Sless@U45T93RA6 I have a flame graph and some initial insights if you're curious#2021-10-2612:48lucasHi everyone! We've published a new library to work with the DocuSign eSignature API. The library also provides an Integrant key so it can be used with Duct or Integrant.
https://github.com/magnetcoop/esignatures.docusign#2021-10-2623:30steveb8nThank you. I need exactly this for my product in the next couple of months!#2021-10-2616:51katoxHi, updated release of PGMig 0.7.1 is out:
https://github.com/leafclick/pgmig/releases/tag/v0.7.1
## [0.7.1] - 2021-10-26
- Added windows cmd script to create the x64 native binary (exe)
- Updated to GraalVM 21.2
- Fix DNS resolution issues in pre-built docker image#2021-10-2621:29Alex Miller (Clojure team)The https://clojure.org/releases/tools#v1.10.3.998 is now available
• Remove bottle :unneeded from brew formulas (no longer needed)
• https://clojure.atlassian.net/browse/TDEPS-209 Include only jar files in classpath from Maven artifacts
• Update to tools.tools v0.2.1 (minor improvements in clj -Ttools list)
• Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.12.1058#2021-10-2707:53Eugenis there a way to get help for a tool other than knowing in advance what it does?
I found out about clj -Ttools list in your announcement.
Is there a way to see what other things are available besides list ?
Is there a way to print docs for those ?
Most CLI tools offer a --help or a man page.
I tried some of the things I know
clj -Ttools
No function found on command line or in :exec-fn
clj -Ttools help
Function not found: clojure.tools.tools.api/help
clj -Ttools --help
Function not found: clojure.tools.tools.api/--help
This works but for clj, not for the tools.
clj --help
IMO I think it's important for this part to play like the rest of the tooling ecosystem so the experience is nice.#2021-10-2712:23Alex Miller (Clojure team)there is some more work to do on the help side of tools for sure#2021-10-2712:24Eugenwhre is the best place to raise an issue to track this ?#2021-10-2712:26Alex Miller (Clojure team)https://ask.clojure.org is always the best place to raise questions/issues#2021-10-2712:26Alex Miller (Clojure team)we do actually have an existing ticket that's near this but it would be helpful to just ask this too#2021-10-2712:27Eugenok, I'll ask this and if I find the ticket include that too#2021-10-2712:28Alex Miller (Clojure team)https://clojure.atlassian.net/browse/TDEPS-201 is the one I was thinking of but it's really a different issue so no need to link#2021-10-2716:45seancorfield@U011NGC5FFY You can get help for -Ttools like this:
(! 649)-> clojure -A:deps -Ttools help/doc
This api provides functions that can be executed from the Clojure tools using -Ttools.
-------------------------
clojure.tools.tools.api/install
([{:keys [as], :as args}])
Install a tool under a local tool name for later use. On install, the tool is procured, and
persisted with the tool name for later use.
...
(! 650)-> clojure -A:deps -Ttools help/dir
install
list
remove
show
(! 651)-> clojure -A:deps -Ttools help/doc :fn show
-------------------------
clojure.tools.tools.api/show
([{:keys [tool], :as args}])
Print info and usage for this :tool.
Options:
:tool (required) - tool name to show
Example:
clj -Ttools show deps-graph#2021-10-2716:46seancorfieldI have deps-new installed as tools and so I can get help for that:
(! 653)-> clojure -A:deps -Tnew help/doc
The next generation of clj-new. Uses tools.build and
tools.deps.alpha heavily to provide a simpler 'shim'
around template processing.
-------------------------
org.corfield.new/app
([opts])
Exec function to create an application project.
#2021-10-2805:20EugenThansk @U04V70XH6. Hard to remember that. and very hard for new folk who come to clojure and need to use the tools to "gues".
I'm more of the my-program --help (or similar) persuasion 🙂#2021-10-2805:56seancorfieldYeah, I sympathize. I've been immersed in the CLI stuff for long enough that some of the "weird" command-line conventions have become second nature but I know they're not "normal".#2022-02-1807:53EugenI've asked on clojure https://ask.clojure.org/index.php/11590/support-help-for-tools-use-standard-options-clojure-tooling#2021-10-2713:19vlaaadreveal Reveal Pro 1.3.265 is out — https://vlaaad.github.io/reveal-pro
Reveal is a Read Eval Visualize Loop for Clojure, a powerful REPL output pane running in the JVM.
This release adds SQL DB explorer that allows you to get a good overview of your database schema and seamlessly browse relational data across multiple tables, all while being available in your REPL!#2021-10-2713:45Ivannice! 💯#2021-10-2713:51vlaaadThanks!#2021-10-2715:07wotbrewWow! this looks amazing ❤️#2021-10-2715:53timoparty-corgi is this kind of visual browsing of databases possible for datalog-dbs like datahike, datomic, xtdb etc? (only tried reveal briefly once)#2021-10-2716:01vlaaadI consider implementing something similar for datomic-like dbs...#2021-10-2717:23metasoarousSeems like it would be easier if anything; The view:table-view could just be a pull, and I'm sure is more annoying to do with a sql queries.#2021-10-2717:24metasoarousIncidentally, may I suggest a different name than table-view? To me, that's a document-view or map-view. Could even explicitly be pull-view.#2021-10-2717:25metasoaroustable-view makes me think of a literal table, like in the db:explore-table view.#2021-10-2717:26metasoarousJust a suggestion...
Regardless, fantastic work! This is very cool stuff 🙂#2021-10-2720:01vlaaad@U05100J3V not sure I'm following you 😞#2021-10-2720:01vlaaadwhat do you mean be table-view and view:table-view ?#2021-10-2802:38jacob.maineFor those interested in visualizing Datomic schemas, may I recommend https://github.com/mainej/schema-voyager? It might be possible to make it work for other datalog-style databases, though I've never tried.#2021-10-2804:30Lucy WangHi there, clj-statecharts, the state machine and statecharts library for clojure/clojurescript, has released 0.1.1 . https://github.com/lucywang000/clj-statecharts
This release updated the version of malli to 0.6.2 to fix https://github.com/metosin/malli/issues/536 . Thanks @jacob.maine for pointing this out!#2021-10-2808:30Jakub Holý (HolyJak)nice! What are your thoughts about cutting a 1.0 release?#2021-10-2810:59Lucy Wang@U0522TWDA Well, there are still quite some features that I consider adding, e.g. history states, final states, so I need to think more about that 🙂#2021-10-2907:42ingesolI think “xstate for clojure” is a very important addition to the clojure development story, and implementation so far is very promising. Hoping to see a community around this.#2021-10-2809:36borkdudejet v0.1.0 jet
Convert between JSON, EDN and Transit on the command line with a query language akin to jq or using regular Clojure.
The new version now comes with camel snake kebab conversions for keys.
https://github.com/borkdude/jet/releases/tag/v0.1.0#2021-10-2910:07borkdudebabashka v0.6.4 - a fast starting Clojure scripting environment babashka
https://github.com/babashka/babashka/blob/master/CHANGELOG.md#063
• Add `java.security.Provider` and `java.security.Security`. This adds compatibility with https://github.com/clj-commons/digest.
• Fix mapping for `babashka.fs/unzip` https://github.com/babashka/babashka/issues/1030
• Pods: support metadata in pod vars, like docstrings (https://github.com/quoll)
• babashka.curl: support `:follow-redirects false` (https://github.com/sudorock)
• Add support for `--init` as a file to be loaded before evaluation actions https://github.com/babashka/babashka/issues/1033 (https://github.com/bobisageek)
• Bump rewrite-clj to v1.0.699-alpha (https://github.com/yannvanhalewyn)
• Fix `BABASHKA_FEATURE_POSTGRESQL` feature flag, initialize `java.sql.SQLException` build time https://github.com/babashka/babashka/issues/1040
• Deps.clj: upgrade to tools version `1.10.3.998` and include new `DEPS_CLJ_TOOLS_VERSION` environment variable to use older or newer tools jar.#2021-10-2918:31lilactownA weird (but cool) announcement: lilactown/autonormal has been renamed to town.lilac/pyramid.
• Why the rename? I didn't like the old one.
• What does the new name mean? I just like it. I probably won't do this again, it was a bit of a hassle.
pyramid is a Clojure(Script) library for doing cool things with graphs made of Clojure data. It provides the same capabilities as autonormal before:
• Normalize your data for you, allowing datascript-like accretion of facts about entities over time with just a simple Clojure map!
• Use https://edn-query-language.org/eql/1.0.0/what-is-eql.html to pull information out of deeply nested maps with blazing speed!
You might be asking, "What do I get by using this new name, anyway?" Glad you asked. The latest version of pyramid includes a brand new capability: an experimental engine for querying your pyramid db (a map in normal form) using datascript-like "datalog" queries. Perfect for exploring a db from a REPL.
Get the latest here: https://github.com/lilactown/pyramid
Questions, comments, suggestions can be made in #pyramid. Bug reports go in github.#2021-10-2918:35ribeloit is funny that many people at the same time come across similar problems and find identical solutions#2021-10-2918:35ribeloa lot of people are disappointed with the way datascript works on the frontend and it is very good that things are emerging to replace it#2021-10-2918:36ribelo@U4YGF4NGM have you tested the performance of datalog queries compared to datascript?#2021-10-2918:37phronmophobicI've been also following @U0BBFDED7’s https://github.com/ribelo/doxa
Really wish there was a matrix of all the options in this space.#2021-10-2918:37lilactownvery little benchmarking so far#2021-10-2918:38lilactownalso watching doxa 🙂 was an inspiration to provide basic datalog-ish query support for pyramid#2021-10-2918:38ribelo❤️#2021-10-2918:39lilactownalso huge shout out to @U051N6TTC who helped me get over some big hurdles early on in understanding how a query engine like this even should work 😄#2021-10-2918:40ribelo@U051N6TTC is wonderful and her work on #asami invaluable#2021-10-2918:41lilactownI imagine, given my current approach to parsing and resolving queries, that any speed improvements pyramid.query has over datascript will go away as I add more features. Only time will tell, though.#2021-10-2918:41lilactownthe biggest use case for pyramid (for me) is still doing fast EQL queries#2021-10-2918:42lilactownLike I said in the announcement, I found the datalog-ish queries immensely helpful when debugging and exploring a large db#2021-10-2918:45souenzzoI hope nobody makes a pyramid scheme with this library 😅#2021-10-2918:48phronmophobicI thought scheme was renamed to racket?#2021-10-2918:48phronmophobicit seems like any programming language could use a library like this#2021-10-2918:50ribelo@U4YGF4NGM q performance is not bad for the first version, looks like it will be great library#2021-10-2919:03wilkerlucioexciting times, seems like we need something like https://clojurelog.github.io/ for local normalized database maps 😛#2021-10-2919:46john@U0BBFDED7 "it is funny that many people at the same time come across similar problems and find identical solutions"
Like you made a =>> six months before I did with injest/=>>, and it does a very similar thing. Had no idea 😆#2021-10-2919:48ribeloI have seen the injest and it looks much better than I did#2021-10-2919:52johnWell, I think yours has more optimizations which are interesting... Slightly different use-case I think. I plan to mention your lib in the reference section, seeing how similar in spirit it is.#2021-10-2920:04ribeloIn danzig I simply assume that we have a collection of maps, so I use native methods to deal with them and avoid reflection#2021-10-2920:05ribeloI recommend you take a look at the @UQ58AKW0J code#2021-10-2920:06ribeloor on @UK0810AQ2, who suffers from benchmarkosis 🙃#2021-10-2920:06ribelo@U050PJ2EU#2021-10-2920:07johnFor sure, I've been picking their brains. They've been helpful#2021-10-2920:21metasoarous> I thought scheme was renamed to racket?
@U7RJTCH6J How am I just now realizing the pun here!? 🤯#2021-10-2920:47Karol WójcikA new release of holy-lambda v0.6.0: holy-lambda https://github.com/FieryCod/holy-lambda
Holy Lambda is a library + set of utils that provide an extremely fast AWS Lambda runtime for Clojure.
The release introduces new features and improvements to existing ones; fixes some long-standing bugs, and improves the dev experience.
Few important changes:
• support arm64 architecture for Native/Clojure backend, which means you can now develop lambdas on M1 🙂
• dependencies for Clojure & Native backend are not longer downloaded to local .holy-lambda directory,
• compilation to .jar is now handled via :compile-cmd key and happens locally. No more adding local libraries via docker volumes. Also one may use arbitrary uberjaring tool now,
• HL now distributes docker images with GraalVM + native-image included (See https://github.com/FieryCod/holy-lambda/pkgs/container/holy-lambda-builder/versions),
• new arm64 runtime for babashka has been introduced, which means even lower cold starts!
If you're already on holy-lambda v0.5.0 check a https://fierycod.github.io/holy-lambda/#/migration-guide.
See the full changelog https://github.com/FieryCod/holy-lambda/releases/tag/0.6.0.
For more information/questions visit #holy-lambda channel.#2021-10-3006:57Chris McCormickHello! I'm excited to announce the v0.0.1 release of Sitefox. 🦊 https://github.com/chr15m/sitefox
It's a ClojureScript backend web framework that runs on Node. About one year ago I stopped using Django + Python and went all in on full stack cljs. I had to build a library to replace the "batteries included" from Django like routing, sessions, email and database etc. Sitefox is the result. I hope you'll find it useful in building our own websites using full stack cljs. 🙏
Quick start.
You can use the npm init scripts to get started:
For a fast backend only website using nbb: npm init sitefox-nbb mysite
For a full stack web app using shadow-cljs: npm init sitefox-shadow-fullstack myapp
If you would like to help spread the word, here is a tweet announcing the release:
https://twitter.com/mccrmx/status/1454341307787137026
Thank you so much!#2021-10-3007:06borkdudeCongrats on the release!#2021-10-3008:04MattiasBut can you run in on the JVM in the browser? (Sorry, very cool release 🙂 )#2021-11-0415:38CaseyThis looks pretty slick! Nice to see a new take in this space.#2021-10-3112:01Adam HelinsHey y'all, first proper stable release for BinF, a Clojure(script) + Babashka library for all your binary needs: https://github.com/helins/binf.cljc
Very useful for lower-level protocols and stuff like that. I've used it for some funky projects like processing MIDI or WebAssembly files 🙂#2021-10-3112:10gklijsAny plans to add things like Protobuf or Avro support?#2021-10-3113:00Adam HelinsI'd say you'd rather use that to build something higher-level and more specific like Protobuf if needed.
I keep it as generic as possible because it was my frustrating experience that there wasn't any good tooling when you needed freedom and efficiency when doing something lower-level like parsing a binary file.#2021-10-3116:38Mathieu CorbinI released today the version 0.7.0 of Mirabelle, a stream processing engine written in Clojure.
You can find more information about the tool on the documentation (https://www.mirabelle.mcorbin.fr/), and about this release on the changelog (https://www.mirabelle.mcorbin.fr/changelog/).#2021-10-3117:57pithylessI remember reading [0] about Mirabelle and it's been on my radar to build something with at some point. Is there a Slack channel where Mirabelle users hang out?
[0] https://www.mcorbin.fr/posts/2021-03-01-mirabelle-stream-processing/#2021-10-3119:19Mathieu CorbinNo, I don't have a slack channel for it. For now the easiest way to reach to me is to create github issues with questions etc..., or with direct messages here#2021-10-3119:35valtterinbb-lambda-adapter is an NPM package that enables loading and running CLJS code on AWS Lambda NodeJS runtime using @borkdude’s nbb https://github.com/vharmain/nbb-lambda-adapter
This enables rapid CLJS development directly in the Lambda console. There’s no need to pre-compile CLJS to JS so the feedback loop is very quick.
See @borkdude’s tweet with a gif: https://twitter.com/borkdude/status/1454836645279186946
Thanks to @karol.wojcik @borkdude and @viesti!#2021-10-3120:01vlaaad> Evaluate nbb on the moon!
>
— tomorrow, probably#2021-11-0107:09Karol Wójcik@U6N4HSMFW idea:
Can handlerProxy accept the array of handlers, and in that situation create a object of {handlerName1: handler1, handlerName2: handler2} ?
Example:
module.exports = {
...handlerProxy("demo.cljs", ["handler1", "handler2"]),
};#2021-11-0111:32borkdudePosted this on Reddit too#2021-11-0111:40Karol WójcikToday I'm releasing some more Lambda goodness 😄 NBB is a nice motivation 😄#2021-11-0113:17Jakub Holý (HolyJak)If you use @weavejester’s Ragtime for DB migrations and 🔥 to use Sean's awesome next-jdbc, you can do that now with the release of https://clojars.org/dev.weavejester/ragtime.next-jdbc (notice the group id)#2021-11-0113:30lispycloudsAnnouncing 0.0.2 of https://github.com/lispyclouds/contajners
An idiomatic, data-driven, REPL friendly clojure client for OCI container engines
The main feature is that its now #babashka compatible from source!
Thanks a lot @eugen.stan @imdad.ahmed for the majority of the work! 🎉 🎉#2021-11-0113:35Karol WójcikAnnouncing https://github.com/FieryCod/holy-lambda-ring-adapter that is compatible with all holy-lambda's backends: native, babashka, clojure.
This is an optimized version of what is already used in production in Retailic.
Demo: https://9g7a59k254.execute-api.eu-central-1.amazonaws.com/api-docs/index.html
Welcome screen: https://9g7a59k254.execute-api.eu-central-1.amazonaws.com/welcome-screen
Source code: https://github.com/FieryCod/holy-lambda-ring-adapter/tree/master/examples/native/src/example
Rationale
I wanted to build a library that provides a simple full-featured integration between Ring and AWS Lambda. A Library that doesn't vendor-locks the user with AWS Lambda.
With the holy-lambda-ring-adapter you don't care about the AWS Lambda, and just regularly develop your application locally with all the goodness you already know. You're entitled to deploy your application either to AWS Lambda or to regular servers with simple commands. Cold starts are optimized, and for our API with dozens of dependencies it's only <=500ms on ARM64. 🙂
EDIT: If you're interested in running Ring apps on AWS Lambda join #holy-lambda channel 🙂#2021-11-0209:46pezA new Calva is out calva https://github.com/BetterThanTomorrow/calva/releases/tag/v2.0.223. The main new feature is ClojureDocs integration.
• ClojureDocs examples in the hover-lookup of symbols. So that you can at a glance see neat ways and caveats about Clojure core-ish symbols. Each example have two buttons/links:
◦ To Rich Comment, prints the example to a rich comment below the top level form you are editing/viewing
◦ To Output Window, prints the example to the REPL/Output window
• A command for printing all clojuredocs examples for the symbol under the cusror to a Rich Comment, default bound to `ctrl+alt+r d` (to go well with the command for opening a new rich comment block).
• A command for printing all clojuredocs examples for the symbol under the cursor to the Output/REPL window, `ctrl+alt+o d`
When the next clojure-lsp is released, this will be available in ClojureScript as well.. See https://calva.io/clojuredocs/ to learn more.
An early dev version of the hover is demoed in this tweet: https://twitter.com/pappapez/status/1452409528511762444#2021-11-0210:12StuartThis is fantastic, this is the pretty much the only featured I missed from Cursive 🙂 And the to rich comment / output window makes it even better than what cursive had.#2021-11-0211:51pezNow also on Youtube: https://www.youtube.com/watch?v=a4sm_B_mqhs#2021-11-0213:15martinklepschVery cool stuff#2021-11-0214:14ericdalloawesome work!#2021-11-0215:01richiardiandreaThis is great and I so so like Rich comments highlight! How does "Go to Rich Comments" work in case of multiple ones?#2021-11-0215:17pezHmm, sounds like I have created a Ux issue 😃 The command prints the example to a new Rich Comment.#2021-11-0215:20pezThere is a Go To Rich Comment in Calva, actually. Though it is not named like that (yet). It is named Create Rich Comment, which will create a new rich comment in “a good place”, which is most often below the current top level form. If there already is a rich comment there, then the command will go there.#2021-11-0216:33pezAnd the new clojure-lsp is out! If you are using ClojureScript, then reload the VS Code window and you will get those ClojureDocs hovers. 🎉 https://clojurians.slack.com/archives/C015AL9QYH1/p1635869261015700#2021-11-0216:28ericdalloclojure-lsp New https://clojure-lsp.io/ https://github.com/clojure-lsp/clojure-lsp/releases/tag/2021.11.02-15.24.47 with lots of improvements and new features! 🎉 Check it out one of them, the live rename of locals
For more information, come to #lsp#2021-11-0223:46Carsten BehringAa new release of , the idiomatic machine learning library for Clojure, is out.
Version 0.1.1 adds support for unsupervised learning together with various unsupervised models (projections, clustering and manifold)
https://clojars.org/scicloj/scicloj.ml/#2021-11-0312:10Jim NewtonI have been appointed chair of the organizing committee of the European Lisp Symposium for 2022, and I'm looking for a couple more reviewers to participate in the program committee. https://easychair.org/cfp/els2022
It would be great if one or two clojurites would be interested in participating in the committee. The main responsibility would be that you would need to read, review, accept/reject and give commentary on 2 or 3 paper submissions. The review process will probably be the first 2 weeks of February 2022.
Anyone interested in taking part or if you have questions please let me know.#2021-11-0317:08mkvlr🎉 Clerk – Local first notebooks for Clojure – is now open source and we have a big new release out:
• 🐙 https://github.com/nextjournal/clerk
• :scales: https://github.com/nextjournal/clerk#rationale
• ⚡️ https://storage.googleapis.com/nextjournal-snapshots/clerk/build/fdf5206fb60fe9230da5b92dbc4b26b504e8b759/index.html#/ ‼️
• 📦 https://clojars.org/io.github.nextjournal/clerk
• 🧪 https://github.com/nextjournal/clerk-demo
• 🪵 https://github.com/nextjournal/clerk/blob/fdf5206fb60fe9230da5b92dbc4b26b504e8b759/CHANGELOG.md#02209-2021-11-03
• 🐦 https://twitter.com/mkvlr/status/1455943025855811590
If you’d like to see what’s new, best check out the ⚡️https://storage.googleapis.com/nextjournal-snapshots/clerk/build/fdf5206fb60fe9230da5b92dbc4b26b504e8b759/index.html#/notebooks%2Fviewer_api.clj and grab some 🌮, see https://storage.googleapis.com/nextjournal-snapshots/clerk/build/fdf5206fb60fe9230da5b92dbc4b26b504e8b759/index.html#/notebooks%2Fhow_clerk_works.clj or 🕹️ https://storage.googleapis.com/nextjournal-snapshots/clerk/build/fdf5206fb60fe9230da5b92dbc4b26b504e8b759/index.html#/notebooks%2Frule_30.clj. Helping spread the word is much appreciated. 🙏#2021-11-0317:09Noah Bogartwhat’s clerk?#2021-11-0317:14mkvlrdoh, thought about writing that but then thought the GitHub link would show the description but I guess that's wrong#2021-11-0317:15mkvlrupdated#2021-11-0317:16Ivanthat's a nice project :thumbsup:#2021-11-0317:22neupsh@U5H74UNSF just a heads up this URL returns 404 https://nextjournal.com/nextjournal/use-restriction#2021-11-0317:28javahippieWaiting to play with it since your :clojureD session, amazing! One question, though: No OSS License?#2021-11-0317:40rickmoynihanYeah was just going to ask that too — you state it’s open source but I don’t see the license.
Congrats on the release though, it looks really good.
I enjoyed playing with it briefly after your earlier announcement.#2021-11-0317:44mkvlr@U3MRWH35M oh, which URL?#2021-11-0317:44mkvlr@U0N9SJHCH @U06HHF230 oh yes, clearly forgot something. will fix the missing license in a bit#2021-11-0317:57neupsh@U5H74UNSF use restriction url i linked there#2021-11-0317:58mkvlrAdded https://github.com/nextjournal/clerk/blob/main/LICENSE (ISC)#2021-11-0317:59mkvlr@U3MRWH35M can’t find where it’s coming from, can you point me to the source?#2021-11-0318:15djblueAwesome, can't wait to try it out! Also, a bit off topic but seeing more projects use #babashka for tooling is great!#2021-11-0318:36neupsh@U5H74UNSF sorry I misunderstood you and thought you were asking which page was returning 404. The link i posted is in pricing page under the "What is Nextjournal's Fair Use policy"? FAQ, which ends the paragraph with Usage Restriction policy. And that link returns 404 when clicked.#2021-11-0318:41mkvlr@U3MRWH35M ah, thank you, I fixed it.#2021-11-0318:44Dimitar UzunovFrom the demo:
;; open clerk
(browse/browse-url (str ":" port))#2021-11-0318:45Dimitar Uzunovbrowse is not required though, this is an alias to which namespace?#2021-11-0318:46djblue[clojure.java.browse :as browse]#2021-11-0318:46Dimitar Uzunovah thanks#2021-11-0318:47Dimitar Uzunovoh this is pretty neat#2021-11-0318:48neupshwhen you use polyglot notebooks can you share data from a cell using one engine to a cell using a different engine?#2021-11-0318:51mkvlr@ULE3UT8Q5 oh actually you can now pass {:browse? true} to serve!, will update the demo to reflect this.#2021-11-0318:53Dimitar UzunovOh it's in there, I just didn't know it's the java namespace, lines 15-16 are not needed :)#2021-11-0318:53Dimitar UzunovPretty clear demo :)#2021-11-0318:54Dimitar Uzunovoops
Execution error (OutOfMemoryError) at java.util.Arrays/copyOf (Arrays.java:3746).
Java heap space
#2021-11-0318:55Dimitar Uzunov(clerk/show! “notebooks/viewer_api.clj”)#2021-11-0321:14mkvlr@ULE3UT8Q5 I've seen this at times, it's a race condition where Clerk would try to write an infinite seq to disc. I'll see that I make the detection more robust or put some (overridable) guardrails in place#2021-11-0321:25Dimitar Uzunovanything I can provide as diagnostic data?#2021-11-0321:25Dimitar Uzunov@U5H74UNSF#2021-11-0321:39mkvlr@ULE3UT8Q5 does this happen for you every time? I have ideas for fixes and I'll let you know once I have something for you to try. If you can share more about your environment (machine, os) that could also be helpful. Thanks!#2021-11-0322:14Dimitar Uzunovopenjdk version “13.0.2” 2020-01-14
OpenJDK Runtime Environment AdoptOpenJDK (build 13.0.2+8)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 13.0.2+8, mixed mode, sharing)
On Big Sur#2021-11-0407:22robert-stuttafordgaaaaah not enough time in the daaaaaay#2021-11-0416:26mkvlrWe released https://clojars.org/io.github.nextjournal/clerk/versions/0.2.214 earlier. Can recommend a bump.#2021-11-0412:31Felipe ReigosaIs it possible to write a drawing program in 9 lines of Clojure code? Yes! Check out the video explanation of my new MockMechanics machine on youtube: https://youtu.be/LBOjGktRqDI)#2021-11-0513:14rafaeldelboniHey Felipe this is very interesting, would you mind to share more about the technical stuff of your project like what you using to render the 3d graphics?#2021-11-0513:43Felipe ReigosaHey Rafael, thanks. I actually wrote the game engine from scratch, I'm just using Clojure and bare OpenGL (through lwjgl), so not much to tell. It will be open sourced soon so you can have a look if you like then. If you want to know more about the game itself though, I recommend the first video on my channel, I explain how it works and everything there. https://www.youtube.com/watch?v=HrwxbQj5mj0&t=642s#2021-11-0516:40rafaeldelboni> so not much to tell
Hahaha, man the integration with LWJGL is super interesting, I was wondering if anyone had made it already.
I'm super interested, I was wondering if was possible to make a nice, and performatic, game engine combining clojure and LWJGL.
Really exited to see your project, thanks for sharing#2021-11-0412:41mpenetMinimalistic "tool" (as in tool.deps) that attempts to handle dependencies version propagation in "multi-modules" repositories https://github.com/exoscale/deps-modules#2021-11-0417:07Joshua SuskaloVersion 1.4.0 of https://github.com/IGJoshua/farolero is released!
• new facilities for requesting values from the user interactively and customizably to help library authors
• fixes for hard-to-trace errors when using bound-fn
• updated #clj-kondo linters
• new documentation for how to integrate laziness with conditions
https://github.com/IGJoshua/farolero#2021-11-0422:00Carsten BehringVersion 0.3.6 of https://github.com/scicloj/sklearn-clj is released!
sklearn-clj gives easy access to most Python Sklearn estimators from Clojure standalone or as a plugin into
• training methods return now all model attributes as Clojure data
• Reference guide was updated here: https://scicloj.github.io/scicloj.ml-tutorials/userguide-sklearnclj.html
https://clojars.org/scicloj/sklearn-clj#2021-11-0503:31pfeodrippeReleased version v0.4.0 of Recife - a Clojure Model Checker, https://github.com/pfeodrippe/recife \o/
Check the https://github.com/pfeodrippe/recife/commit/09e11f2f172b684af466c645208adf7f2ebc0654.
The biggest feature is that now you can not only check your design, but also, with some effort, your implementation (very rough, but works)!
It uses the generated traces from your model checker and randomly chooses traces which will be validated against (like PBT, but driven by the design), see an https://github.com/pfeodrippe/recife/blob/master/test/example/implementation/wire_1.clj#L118.
I will be giving a quick talk about Recife at London Clojurians with the great @bruno.bonacci as the host next Tuesday, check https://www.meetup.com/London-Clojurians/events/279398890/.
Now it's time to do proper documentation for this library.#2021-11-0506:25robert-stuttafordin the readme:
(e.g. if the process will terminate or if the ).#2021-11-0509:28rickmoynihanInteresting — I’d quite like to use something like this; but my fear is that learning it would be harder than learning TLA+, as I’d need to learn both, and how one maps into the other.
I’ve only dabbled in TLA+ and not enough to really grok it; but I do know clojure.
What does this aim to make easier?#2021-11-0509:39msolliFor someone new to the concept of a model checker - how does it compare to property-based testing?#2021-11-0510:32Jakub Holý (HolyJak)I am attracted by the possibilities of model verification but I have never worked in the domain so I do not know many things, such as
• As a backend clj developer, where I might use this in practice?
• What is the least resistance way of getting productive with model checking? Do I need to learn TLA+?
• What are the different approaches to model checking, their limitations and pros and cons => which is (not) suitable for my needs?#2021-11-0511:28rickmoynihan@U06BEJGKD: I’m no expert — but I think the main thing is that something like TLA+ aims to give you a proof of correctness for a model.
Property testing doesn’t give you a proof of correctness; it just asserts that a given property holds for all tested inputs; of an implementation.
i.e. the main differences to me seem to be in mathematical proof of correctness vs evidence of it… and also the difference between a model of a system and the system itself.
A model being the thing you design and work on to get your thinking straight; before you engage in the implementation.#2021-11-0511:32rickmoynihanIf your process was:
1. develop and prove a model.
2. build an implementation of that model
3. test the implementation
Then one of the things you want to do is ensure the proofs of the model carry over into your implementation. i.e. you need something to assure the implementation is a faithful recreation of the proven model. I suspect there are many techniques to doing this; but I’d imagine one would be writing property tests of the implementation which are directly derived from your model.#2021-11-0511:35msolliAha, that’s useful, thanks!#2021-11-0512:27pfeodrippeThanks for answering @U06BEJGKD question, @U06HHF230!
@U06HHF230 @U0522TWDA You don't need to learn the TLA+ language at all, the concepts will be similar (e.g. invariants, state, temporal properties) as we call TLC (the TLA+ model checker) behind the scenes, you just have to keep using Clojure (it does not transpile CLJ to TLA+, it's real CLJ!).
You will use model checking in practice only if you feel something is kinda important for your business, you definitely shouldn't need to use it to model a CRUD API, but it would be good to model, for example, some custom protocol you have which replicates data and which can make you lose a lot of money if it violates some invariant. See the business case for when to use and not to use at https://www.hillelwayne.com/post/business-case-formal-methods/, Hillel also has a lot of great posts about TLA+ (besides his wonderful newsletter).
The best book to initiate at Model Checking I know is the one from Hillel itself https://link.springer.com/book/10.1007/978-1-4842-3829-5, there is even a entire suite of tests based on the book at Recife so you can follow it in Clojure (https://github.com/pfeodrippe/recife/blob/master/test/hillel_test.clj).
One big limitation of model checking is that, while you don't need to write a Math proof (which it takes a LONG time and lots of qualified personal), it brute forces all the possible states, so it may take a while to finish. There are ways to mitigate that, but only by using is that you will feel. For example, there is something called the Small Scope Hypothesis which says that if it works using 2 or 3 entities, then it's very likely that it will work with many, so you don't need to be crazy and test 10 servers with 20 queues (it increases exponentially the number of states).#2021-11-0512:28pfeodrippeLet me know if you have some other questions, it's an experiment and I would be happy to improve based on the community's feedback :)#2021-11-0512:34rickmoynihan> You don’t need to learn the TLA+ language at all, the concepts will be similar (e.g. invariants, state, temporal properties)
Ok, but aren’t the best descriptions of these concepts and how to wield them going to be in resources that teach the TLA+ language?#2021-11-0512:44pfeodrippeYes, Rick, absolutely, there are tons of resource out there for it in TLA+. There are some new model checkers, like the one in Rust, which also explain it beautifully https://docs.rs/stateright/0.28.0/stateright/.
Others in Java, C# etc.
For us it may suffice to say to start that an invariant is just an assertion about one state (a function) and a temporal property is an assertion about multiple states (a function + operators like always or eventually).
But I agree we definitely need to work on documentation 😅, you can check about the concepts also at https://learntla.com/introduction.#2021-11-0512:55rickmoynihanThanks for the links…
It’s a big area, and figuring out an appropriate starting point / journey is part of the challenge.
For example - previously I started with LL’s excellent video series… It was quite refreshing to see a turing award winner, not taking himself too seriously and dressing up randomly as a clown 😆
I went from there to playing around with the TLA+ IDE and tools, and trying out some examples… but my attention drifted onto other things.
I guess I never quite got enough of an in, to figure out if what I was learning was appropriate for the problems I might apply it to.#2021-11-0512:55rickmoynihani.e. was TLA+ even the right tool — or would I better with Idris or Coq?#2021-11-0513:06pfeodrippeYeah, things are getting better in the TLA+ tooling, but it's slow progress, so I went to full Clojure with the ready to be used tools.
Idris and Coq are much harder IMHO as you they lean into formal proofs, which takes WAAAY longer to build. They are complementary to model checker, but low ROI for most of the things we need to do in practice.#2021-11-0513:06pfeodrippeNice to see you have some experience :)#2021-11-0513:07pfeodrippeI've created an issue so you can add questions if you want there and I will try to answer in the talk https://github.com/pfeodrippe/recife/issues/6. But you can keep asking me here o/#2021-11-0604:30fingertoe@rickmoynihan I also loved the LL videos. There was some meta humor in the fact that it was so apparent that he was attempting to move his listeners from state a to state b in a provable manner.. The displayed pattern of his process re-enforced the whole point of the curriculum.#2021-11-0608:16Jakub Holý (HolyJak)What video series are you talking about? Sounds fun!#2021-11-0614:18pfeodrippeProbably https://youtube.com/playlist?list=PLWAv2Etpa7AOAwkreYImYt0gIpOdWQevD#2021-11-0812:17rickmoynihanYes that’s the videos — though the website is slightly better and has links to supporting materials:
http://lamport.azurewebsites.net/video/videos.html#2021-11-0516:26rafaeldelboniReleased version v0.0.3 of nota - A Static Markdown Blog/Site written using fulcro, pathom, babashka and no backend.
https://github.com/rafaeldelboni/nota
The main idea behind is create a page, that could be hosted using something like github-pages and would read markdown files and a simple "database.edn" and render pages and posts with a static route.
It has some babashka tasks that can be used to create new pages and posts.
https://rafael.delboni.cc/nota/ (Example running in gh-pages)
Kudos to @fi.morais.mail that made in this release the amazing visuals and CSS.
I hope you all like.#2021-11-0518:22Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.10.3.1020 is now available:
• https://clojure.atlassian.net/browse/TDEPS-83 Invalidate classpath cache when local dep manifests change
• Add new clj -X:deps list program to list the full lib set on the classpath, see https://clojure.github.io/tools.deps.alpha/clojure.tools.cli.api-api.html#clojure.tools.cli.api/list for more info
• Bump deps to more recent versions - aws-api, jetty-client, etc
• Clean up exception handling for -X/-T
• Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.12.1067#2021-11-0800:35seancorfieldcom.github.seancorfield/expectations {:mvn/version "2.0.137"} -- The clojure.test-compatible version of the Expectations testing library -- https://github.com/clojure-expectations/clojure-test -- v2.0.137 is the "gold" release of the 2.0 version that has been in testing for five months (after several months of development) and is the first new release of this library since December 2019. Changes since Alpha 2 in June include: exported clj-kondo configuration, bug fix for dynamically constructed regex predicates, documentation updates (thank you @dharrigan for inspiring some of those!), and a switch to build.clj like the other projects I maintain. Follow-up in #expectations#2021-11-0803:23djblueportal Portal https://github.com/djblue/portal/releases/tag/0.17.0, a data visualization / navigation tool, is now available! 🎉
Since my last post on #announcements, a few major additions have happened:
- A https://marketplace.visualstudio.com/items?itemName=djblue.portal to host the portal ui directly in vs-code is available.
- An intellij extension to host the portal ui directly in intellij is available.
- Currently must be installed via a https://github.com/djblue/portal/releases/download/0.17.0/portal-extension-intellij-0.17.0.zip as it hasn't been published yet.
- Multi-select functionality
• This is really handy for diffing two arbitrary values!
Many other improvements have happened, for more info check out the https://github.com/djblue/portal/blob/master/CHANGELOG.md. And as always, you can try out all the UI changes via the https://djblue.github.io/portal/.#2021-11-0803:26jumarAny chance to also have “Emacs extension” soon?#2021-11-0803:29djblue@U06BE1L6T these extensions act as hosts to the Portal UI (a reagent web app) and as far as I know emacs doesn't have a readily available way to host web apps. If there is an easy way to do so, please let me know!#2021-11-0803:31djblueAs an emacs user, https://github.com/djblue/portal#editor-integration is my current portal+emacs integration.#2021-11-0803:36jumarAh, good - thanks for sharing.#2021-11-0803:37djblueWhat the intellij extension looks like:#2021-11-0803:40djblueWhat the vs-code extension looks like:#2021-11-0804:07Ben SlessIt is possible to embed in Emacs as a XWidget, I think.#2021-11-0804:13djblue@UK0810AQ2 I've seen https://github.com/akirakyle/emacs-webkit in the past which wasn't ready yet. Any links for XWidget embedding?#2021-11-0804:16djblueAny embedding of the portal UI would require a js vm equivalent to v8 👌#2021-11-0804:38Ben SlessThis might be a place to start
https://www.reddit.com/r/emacs/comments/4srze9/watching_youtube_inside_emacs_25/#2021-11-0815:06Jakub Holý (HolyJak)I thought Emacs was a real web browser?! troll#2021-11-0815:41Ben SlessAlready does, but it doesn't render js#2021-11-0817:11wilkerlucionice, is there docs on how to use the intellij extension?#2021-11-0817:13djblue@U066U8JQJ Not yet, but all you need to do is install the extension via the zip artifact. Then make sure you have 0.17.0 installed in your process and use the portal.api as normal 👌#2021-11-0817:15djblueOhh, also specify (def idea (portal.api/open {:launcher :intellij}))#2021-11-0819:01wilkerlucio@U1G869VNV thanks, but still not able to get it, I updated portal to 0.17.0 on my deps, installed by opening the portal-extension-intellij-0.17.0.jar on intellij, it looks its correctly installed#2021-11-0819:01wilkerluciobut when I try to run the (def idea (portal.api/open {:launcher :intellij})), nothing happens#2021-11-0819:02wilkerlucio(installation looks like this)#2021-11-0819:03djblueMight be related to https://clojurians.slack.com/archives/C0185BFLLSE/p1636395361039000?thread_ts=1636340302.025800&cid=C0185BFLLSE#2021-11-0815:04cjsauerIntroducing joinery, a protocol and stock implementation for accessing in-memory graph-like/normalized data structures using standard clojure(script) map interfaces. https://github.com/cjsauer/joinery#2021-11-0815:36robert-stuttafordThis is really interesting#2021-11-0815:51cjsauerThanks! I’ve been experimenting with tools like:
• @U4YGF4NGM’s https://github.com/lilactown/pyramid
• @U051N6TTC’s https://github.com/threatgrid/asami
• @U0BBFDED7’s https://github.com/ribelo/doxa
• @U066U8JQJ’s https://github.com/wilkerlucio/pathom3 smart-map
I noticed this pattern of wanting to pass the “database” into a function pipeline (or UI tree) with map-like access being the driver of join resolution. This is as opposed to having the query in hand upfront. That “smart map” interface (coined by Wilker) is really intriguing, so this is my attempt at bringing it to other data structures.#2021-11-0816:54lilactownthis looks kinda like datomic/datascript's lazy entity map#2021-11-0816:54lilactownbut more general. 😄 really cool!#2021-11-0816:55lilactowncan I print a map with cycles?#2021-11-0817:09cjsauerYea, datascript’s entity impl gave me some hints at how to impl a custom map type. I really need to add a prior art section to the readme…lots of inspiration in this space.
Printing just defers to the wrapped map at the moment, so cycles won’t be visible, and you’ll see joins in their unresolved state, ie [:thing/id 1] . I can see a recursive-print being useful tho. It’d have to keep track of seen entities of course to avoid infinite loops.#2021-11-0817:11cjsauerOr maybe more generally, a denormalize function.#2021-11-0817:16pithylessThis looks cool; another prior art is Fulcro's database structure - which could also give some inspiration for how maybe we can build tooling (similar to Fulcro Inspector) that is not implementation-specific.#2021-11-0817:19pithyless@U6GFE9HS7 one thing I would reconsider is if is-join? protocol method should not be [this table v] - one can always ignore it (as in the case of the joined-map), but I have a suspicion sometimes the DB/Table could be responsible for returning this data (e.g. an index/cache of ident links).#2021-11-0817:23cjsauerAdded a https://github.com/cjsauer/joinery#prior-art section to the readme.
@U05476190 I think that’s a great idea. Especially given that some data structures come with an upfront schema. is-join? would need to reference not only the schema, but also the key k in order to make its decision.#2021-11-0817:26pithylessah right, just realized that the protocol says nothing about how to get values from table; just how to follow references#2021-11-0817:43cjsauerIn fact, I could see both is-join? and join requiring an arg list like [db entity k v] to be fully flexible…#2021-11-0919:41CaseyVery interesting, I love the many takes on this pattern.
Any plans to add updating, or will it remain read only?#2021-11-0920:27cjsauer@U70QFSCG2 me too, it’s a very interesting space.
This protocol is specifically focused on read-only. Updating tends to be handled by the underlying source quite well (asami/datascript transaction, or just an update-in when using a plain table).#2021-11-1215:44CaseyTook it for a spin, and it's pretty slick. I'm tooling around with a turn based game with lots of gnarly state. But every function is pure the whole way through. Was using datascript before, but datalog was feeling very heavy, joinery is a nice and lightweight way to treat the state map as a map, but keeping it normalized!#2021-11-1217:54lilactown@U70QFSCG2 if you find yourself looking to select nested trees of data - try out https://github.com/lilactown/pyramid along with it 😉#2021-11-1218:17cjsauerWas just going to suggest that 🙂 pyramid and joinery work really well in tandem. I like that pyramid handles the adding/normalization logic, and joinery can give you a “smart map” interface to it. Really fun combo.
I also began exploring other options when datascript started feeling heavy (transactions especially), and I find this to hit a really nice niche for certain applications.#2021-11-1218:17cjsauerAlso thanks for trying it out 🙂#2021-11-1218:48CaseyCool! I'll check pyramid out. I've used specter for years before deciding that normalized graphs are much easier to work with (after using pathos and fulcro). Specter is really powerful, but unnecessary if you can avoid the complexity of nested data#2021-11-0815:32Carsten BehringVersion 1.6.0 of clj-py-R template for polyglot Clojure has been released.
Main changes are:
- far faster Docker build and minimal Dockerfile thanks to base images on Dockerhub
- support for Singularity and Gitpod was added
https://clojars.org/clj-py-r-template/clj-template#2021-11-0902:06amarunminify uses your source map to get sensible JS stack trace errors. Made with @borkdude's #nbb -- a civilized way to experience node
https://github.com/xfthhxk/unminify#2021-11-0912:58blueberryNumerical Linear Algebra for Programmers 1.0.0 has just been released!
Check it out at: https://aiprobook.com/numerical-linear-algebra-for-programmers/#2021-11-0913:01Teemu KaukorantaCongratulations on the book! Crossposting to different channels is discouraged, and this channel is for project/library announcements. #news-and-articles is probably the right place for this.#2021-11-1108:04skurowith a bit of a delay, but the recordings from the Dutch Clojure Meetup on Mirabelle, the stream processing engine by @mcorbin are now published on https://youtu.be/auafRjne9SA#2021-11-1110:31Jakub Holý (HolyJak)I think this channel is for lib releases, while articles and videos should be posted in #news-and-articles#2021-11-1414:35skuroYou are right, I'll chance channel next time. Thanks!#2021-11-1204:32tony.kayI've created the first version of a Fulcro RAD template.
https://github.com/fulcrologic/fulcro-rad-template
This template includes everything needed to get started with Datomic Free, Fulcro, and Fulcro's Rapid Application Development add-on (including a script for customizing the top-level package name for the files). In the coming weeks expect to see new announcements about videos and documentation on the #news-and-articles channel.#2021-11-1211:04borkdudeThe babashka AWS pod 0.1.0 is out.
It is a pod based on Cognitect's aws-api and gives access to it from babashka.
• Bump deps (see `deps.edn`)
• Add `pod.babashka.aws.logging` namespace with `set-level!` function. See https://github.com/babashka/pod-babashka-aws#logging. https://github.com/babashka/pod-babashka-aws/issues/41
• Fix transit serialization of `Throwable` and `Class` in `:Error` payload. https://github.com/babashka/pod-babashka-aws/issues/30
https://github.com/babashka/pod-babashka-aws/blob/main/CHANGELOG.md#v010
You can run it directly from the pod registry like this:
https://github.com/babashka/pod-registry/blob/master/examples/aws.clj
Follow up in #babashka#2021-11-1213:45tony.kayFulcro 3.5.8 is out. This release includes a minor change that is necessary for Fulcro to work properly when using the latest Clojurescript compiler.
https://github.com/fulcrologic/fulcro#2021-11-1214:09Eric ScottJust released v 0.1.2 of a library that allows you to interact with Jena RDF models using the ont-app/igraph protocol:
https://github.com/ont-app/igraph-jena
The aim of IGraph is to provide a common set of abstractions over a wide variety of graph representations that allow each of them to be treated as a clojure-y container using IFn:
(g) -> {s {p #{o}}}
(g s) -> {p #{o}}
(g s p) -> #{o}
(g s p o) -> truthy
RDF versions if IGraph also have support for mapping between namespaced keywords and URIs.#2021-11-2414:08KelvinSorry for being a bit late to the party, but I want to say this is great! My company is working on an RDF-based graph database system, and the ont-app libs are very helpful in designing RDF graphs.#2021-12-1118:48Eric ScottThanks so much for the kind words! Please let me know if something is causing you grief, and try to get on it as soon as I can.#2021-11-1214:17Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.10.3.1029 is now available
• https://clojure.atlassian.net/browse/TDEPS-212 Cover a much wider range of valid git dep urls, including git file urls
• Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.12.1071#2021-11-1214:52tony.kayFulcro RAD 1.1.0-RC2 is on Clojars. This release fixes a number of minor bugs, improves docstrings, and adds a number of helper functions that are useful for when you take control of rendering a generated form or report.
The biggest addition in this version is a new form debugger. If you are using the latest semantic-ui rendering plugin, then you can add fo/debug? true to a form, and all sorts of useful info will be rendered next to the form in the UI to help you debug issues.
https://github.com/fulcrologic/fulcro-rad/
Also, the latest rendering plugin that uses Semantic UI was released as well: version 1.2.0 at https://github.com/fulcrologic/fulcro-rad-semantic-ui, which contains the logic for the debug option, along with a few other minor improvements.#2021-11-1217:00Jakub Holý (HolyJak)https://github.com/holyjak/clj-concordion{:tag :a, :attrs {:href "https://github.com/holyjak/clj-concordion"}, :content ("https://github.com/holyjak/clj-concordion")}https://github.com/holyjak/clj-concordion - the beveloper-friendly, simple BDD tests using Clojure and clojure.test, based on http://Concordion.org - upgrades to the latest Concordion 3.1.3 and adds support for clj-kondo#2021-11-1221:44Jakub Holý (HolyJak)Release 2.1.2 which actually exports the kondo config correctly 😅#2021-11-1222:51Jakub Holý (HolyJak)Many thanks to @U04V15CAJ for discovering the problem and helping me fix it. You rock!#2021-11-1222:50Alex Miller (Clojure team)https://github.com/clojure/tools.build v0.6.4 ea76dff is now available
• java-command - add control over using classpath file with :use-cp-file (default=:auto)
• compile-clj - can now accept java-command passthrough args :java-cmd, :java-opts, :use-cp-file#2021-11-1223:53Alex Miller (Clojure team)https://github.com/clojure/tools.build v0.6.5 a0c3ff6 is now available
• git-process - NEW task to run an arbitrary git process and return the output
• git-rev-count - updated to use git-process, added :git-command attribute#2021-11-1300:59tony.kayI've updated the Fulcro RAD book! There is a new chapter that has been desperately needed that describes how to go about doing the most common "outside the box" customization to RAD forms.
RAD is a rapid-application development library add-on for Fulcro. It leverages Fulcro, React, and database/rendering plugins to allow you to quickly create full-stack web/mobile/desktop React applications in a declarative manner that eliminates a huge amount of manually-written UI, networking, and database code.
https://book.fulcrologic.com/RAD.html
For those that want to jump directly to the new content:
https://book.fulcrologic.com/RAD.html#_advancing_your_forms_taking_control_of_form_implementation#2021-11-1421:40seancorfieldSince access to the infrastructure hosting http://clojure-doc.org has been lost and nothing merged has been able to be updated on the site for maybe three years now, I have set up a (work-in-progress) version of the Clojure Guides site at https://clojure-doc.github.io/ as a GitHub organization site, powered by Cryogen. I've been a contributor to the old site for years and I've talked with Michael Klishin several times about migrating it to a GitHub repo like this. I just finally found the time and inclination to do the work. All of the old content should be present but the formatting will likely be a bit messed up in places as I continue refining and editing the raw material. I've created #clojure-doc to discuss the new version of the site and I welcome contributors (please!). Follow-up in the #clojure-doc channel.#2021-11-1521:23eggsyntaxI wonder whether it's worth a rename -- the clojure-doc vs clojuredocs name clash has been a point of confusion for new users IME.#2021-11-1521:52seancorfieldI'm hoping that the http://clojure-doc.org domain can be pointed at the GH docs domain. There's already a CNAME in place.#2021-11-1521:52seancorfield(the URLs are different though so that might also be confusing for some folks)#2021-11-1520:21borkdudeneil is a CLI to add common aliases and features to deps.edn-based projects.
By request neil is now available as a clj -T tool!
https://github.com/babashka/neil#tools-usage
Also some things have been improved in the latest versions. Install the most recent version with:
clj -Ttools install io.github.babashka/neil '{:git/tag "v0.0.17"}' :as neil
Then run this:
clj -Tneil add-dep :lib org.clojure/tools.cli
to add a dep. Or run:
clj -Tneil add-build
to add a build.clj file + config. By default it will add the latest tools.build version. If it was already added, it will re-add the newest.#2021-11-1614:52Matheus BernardesIntroducing https://github.com/clj-holmes/clj-holmes a CLI SAST (Static application security testing) tool which was build with the intent to find vulnerable Clojure code via https://github.com/clj-holmes/clj-holmes-rules that use a simple https://github.com/clj-holmes/shape-shifter but it can also be used to find any kind of https://github.com/clj-holmes/clj-holmes-rules/blob/main/correctness/schema-require-typo.yml.
By now we're going to focus our efforts to properly document and test all the projects in the clj-holmes ecosystem but please fell free to open discussions and contribute with it.#2021-11-1616:51borkdude@U02M2U71Q79 Interesting project. I see in the readme that you were inspired by grape. I've also used that inspiration to use clojure.spec here: https://github.com/borkdude/grasp.#2021-11-1617:10Matheus BernardesYeah, I'm still working in the doc but grasp was also one of my inspirations t-hanks.
I just wrote it from "scratch" because I was trying to learn new things during the process.#2021-11-1617:16borkdudeOf course! :)#2021-11-1617:21Matheus BernardesAlso the idea was to provide a really simple API for creating rules since the security folks from my team does not know exactly how to write code.#2021-11-1619:15mynomotoIt's this like semgrep but clojure specific? https://semgrep.dev/#2021-11-1619:17Matheus Bernardesit is exactly where I'm aiming @U05094X3J#2021-11-1619:37vemvyeah tooling-wise sky is the limit. something like grasp seems a reasonable baseline, not sure if that will survive a macroexpansion like -> (clj-kondo certainly does that)
Something like https://github.com/clj-holmes/clj-holmes-rules/blob/295aafe4420b8e9e2ce1f9f9e795233fd8c5f189/security/weak-hash-function-md5.yml#L11 is very accurately implementable with Eastwood (tools.analyzer) tech - it will survive arbitrary macroexpansions, and values known at compile-time (e.g. "MD5" is the value of a var)
Either way, 👏 && 🎩 s off!#2021-11-1620:51borkdudeIt depends entirely on the use case. Currently grasp doesn't expand any macros. But I can imagine hooking it up with tools analyzer or so wouldn't hard and then it could. Right now it (ab)uses SCI to understand the ns form with respect to resolving symbols, but this could also be handled 1) using the clj-kondo approach, or 2) tools analyzer.#2021-11-1620:51borkdudeThe use case can also be to grep for the surface form, not the expanded form#2021-11-1620:52borkdudeI'm using grasp myself mostly for statistical purposes: how do people use X, to inform choices like: how much time do I want to spend on feature X for clj-kondo or SCI or JIRA-1xxx#2021-11-1811:36Matheus BernardesIn the beginning of the project we tried to use tools.analyzer but we kind of get lost in the AST and we did not had the time to understand it since we're going to use it at the company we work for 😕 so the currently use case is to only grep the surface without macro expansion.#2022-11-0409:31MIJOTHYsorry for the necro; I’m curious what motivated having this as a separate tool vs integrating with semgrep (or other tools)? Are there some limitations to semgrep that make it unfit for clojure usage?#2022-11-0412:36Matheus BernardesI was just on the mood to code it from scratch. But it’s in my personal todo to implement it using semgrep.#2022-11-0412:38MIJOTHYah thanks. let me know if i can help out, as im using semgrep at work for other stuff and it would be cool to apply it to clojure too#2021-11-1622:47wilkerlucioRelease [com.wsscode/pathom3 "2021.11.16-alpha"]! This release includes:
• Add extension point ::p.error/wrap-attribute-error
• Fix batch calls with distinct parameters
• Add pco/final-value helper to mark a value as final
https://clojars.org/com.wsscode/pathom3#2021-11-1721:21uochanJust released antq ver 1.3.0, Tool to point out your outdated dependencies.
https://github.com/liquidz/antq
Libraries in :local/root deps can be detected now. This may be useful for multi moduled projects.
And also fixed a authentication bug for private repositories.#2021-11-1722:25ingesolFirst release of a tiny re-frame wrapper for clj-statecharts. It provides an integration and some nice utilities. https://github.com/ingesolvoll/re-statecharts#2021-11-1816:19tony.kayI’ve released Fulcro RAD 1.1.0-RC3 (and fulcro-rad-datomic 1.1.0-RC1, and fulcro-rad-sql-0.0.6-alpha). These new versions remove hard dependencies on Pathom 2, but allow you to explicitly require either Pathom 2 or the new Pathom 3 library (which has a new package/architecture). A new version of the demo application is on the pathom3 branch of the fulcro-rad-demo repository (https://github.com/fulcrologic/fulcro-rad-demo/tree/pathom3). Note, the SQL side of the demo is not finished/tested.
https://github.com/fulcrologic/fulcro-rad/
You will have to make sure you have an explicit require of Pathom 2 if you upgrade a current app (which you should have had already(, but there should be no breakage in the pre-existing pathom namespace. There is a new pathom3 namespace that has the code for integrating with the newer version.#2021-11-1819:09vlaaadNew version of remote-repl — 1.2.12
https://github.com/vlaaad/remote-repl
Remote REPL is a REPL that sends input to another REPL over the network and prints results back, a.k.a. REPL client. This version changes behavior of :reconnect true option to always reconnect (instead of reconnecting only on network errors). It also makes it easier to install remote REPL as a clj tool (i.e. clj -Tremote-repl repl :port ...)#2021-11-1913:01borkdudeAnnouncing carve v0.1.0
https://github.com/borkdude/carve
Carve is a tool which lets you discover unused vars in your project and offers an interactive way to remove them.
Among other improvements added over the last few months, it can now be used as a clojure -T tool:
Install: clj -Ttools install io.github.borkdude/carve '{:git/tag "v0.1.0"}' :as carve
Use: clj -Tcarve carve! '{:paths ["src"] :report {:format :text}}'
Aside from running on the JVM and as a binary, can also run as a babashka script:
https://github.com/borkdude/carve#babashka#2021-11-1916:04Lennart BuitThat emoji of you is golden tho, who added that :’)#2021-11-1916:05borkdudeIt wasn't me ;)#2021-11-2001:26ericdalloclj-easy Announcing first release of https://github.com/clj-easy/stub, a tool/library to generate stubs (mocked code) for a given classpath!
This tool should help other projects that want to know about some code even if the jars don't provide the source code, for example with that https://clojure-lsp.io//https://github.com/clj-kondo/clj-kondo should be able to analyze closed source jars like Datomic, generate the stubs with this tool and then provide most features like completion, linting and other cool features! 🎉
For more information, come to #clj-easy!#2021-11-2115:55Sam RitchieI’ve just released v0.20.0 of the #sicmutils computer algebra system! This release adds a bunch of improvements around support for differential geometry + general relativity problems. Every piece of code from Sussman and Wisdom’s http://xahlee.info/math/i/functional_geometry_2013_sussman_14322.pdf book now runs https://github.com/sicmutils/sicmutils/tree/main/test/sicmutils/fdg.
Highlights:
• https://github.com/sicmutils/sicmutils/blob/main/test/sicmutils/fdg/einstein_test.cljc#L41 are now computed (in the tests!) in 90 seconds. Not bad for the equations governing the evolution of our universe.
• The define-coordinates macro allows you to install a full set of bindings for a manifold’s coordinate functions + vector and form field operators into a namespace
• The complex number reader literal now handles vector inputs like #sicm/complex [1 2], and the print representation uses this format vs the old #sicm/complex "1+2i" (still supported!)
Sponsor link, if you want to support this work ❤️: https://github.com/sponsors/sritchie
Clojars: https://clojars.org/sicmutils/sicmutils
detailed release notes: https://github.com/sicmutils/sicmutils/releases/tag/v0.20.0
cljdoc: https://cljdoc.org/d/sicmutils/sicmutils/0.20.0
Cheers!#2021-11-2212:13vlaaadI’m proud to present an initial release of tweet-def library — tweet as a dependency! 🎉
https://github.com/vlaaad/tweet-def 🎉
Using this library you can depend on one-liners tweeted by other Clojurists!#2021-11-2212:17imre😢
user=> (tweet/def "")
Execution error at io.github.vlaaad.tweet-def/def (tweet_def.clj:53).
EOF while reading
#2021-11-2212:19vlaaadoh no#2021-11-2212:20borkdude@U47G49KHQ will you also make an extension for tools.deps.alpha? it has extensible multimethods. I'm sure the community will make good use of it.#2021-11-2212:30vlaaadI think this is a great idea, and I asked in #tools-deps yesterday about it#2021-11-2212:31vlaaad@U08BJGV6E I released a hotfix: v2 works on your tweet#2021-11-2212:34imre🎉
; clj -Sdeps '{:deps {io.github.vlaaad/tweet-def {:git/tag "v2" :git/sha "134a803"}}}'
Checking out: at 134a8033b371cbb783ff4011175666388fca6dec
Clojure 1.10.3
user=> (require '[io.github.vlaaad.tweet-def :as tweet])
nil
user=> (tweet/def "")
#'user/<<-
user=> (def a 1)
#'user/a
user=> (<<- (if (odd? a) 1) 3)
1#2021-11-2212:34imrenice#2021-11-2212:34imrethe example in the readme is slightly off, though#2021-11-2212:35vlaaadwhat’s wrong there?#2021-11-2212:38pezOMG, this is awesome, @U47G49KHQ!#2021-11-2212:38imreah no sorry, I confused the readme with the comment block in tweet_def.clj :s#2021-11-2212:41vlaaadah yeah, that comment now is a bit weird#2021-11-2212:44pezI challenge the immutability of tweets, though. 😃 They can be deleted and also made private/followers only.#2021-11-2212:44vlaaadThis is a first truly social dependency! Where else can you go to definition of some function and leave reply to it with some memes#2021-11-2212:44flowthingGists?#2021-11-2212:45vlaaad@U0ETXRFEW, your critique equally applies to git dependencies#2021-11-2212:45borkdudeipfs?#2021-11-2212:45pezTrue, true#2021-11-2212:45borkdudegists can already be used as gitlibs#2021-11-2212:45vlaaadwhy not straight to ethereum chain layer 1#2021-11-2212:46vlaaad“pay $100 to deploy your oneliner”#2021-11-2212:46vlaaadbut then it’s forever#2021-11-2212:46pez😃#2021-11-2212:46pezA better choice is probably #convex then.#2021-11-2212:47borkdudeI think I'll just stay with tweet-def#2021-11-2212:48borkdudeI mean, what more do you need, if a library is longer than a tweet, it's obviously too complex#2021-11-2212:49pezSo then you won’t vote for a feature request that tweet/def should unwind twitter threads?#2021-11-2212:51borkdudePut it in a tweet and then we can build a JIRA around tweets#2021-11-2212:52borkdudeif your proposal is longer than a tweet, it's not a good one#2021-11-2212:52borkdudetwira#2021-11-2212:52vlaaadit’s like amazon’s 6 pagers, but shorter#2021-11-2212:54borkdudealthough I think there is a place for unwinded tweets to store base64-encoded blobs... tweet-def-lfs#2021-11-2216:28vlaaadOne downside of twitter deps is unclear license for the code…#2021-11-2216:29vlaaadlooking at the twitter’s terms of service it seems by default tweet deps can be used only by twitter inc 😄#2021-11-2307:42robert-stuttafordwhat could go wrong lol#2021-11-2317:06borkdude🤯 https://twitter.com/MrEbbinghaus/status/1463192005429891076#2021-12-1615:05borkdudehttps://twitter.com/borkdude/status/1471496169691836427#2021-12-1615:24imrenow I think I might want to have this on my dev classpath#2021-11-2314:39athosI just published the first release of sweet-array https://github.com/athos/sweet-array, an array manipulation library for Clojure with sweet array type notation and more safety by static types!
• Defines a concise and intuitive array type notation, and provides a generic array constructor which can be used for any types and dimensionalities
• Automatically inserts type hints for arrays based on the results of type inference, which reduces the cases where users have to add type hints manually#2021-11-2315:25Noah Bogartthis is cool! any particular reason you didn’t wrap/re-export alength?#2021-11-2315:59respatializedthis seems very useful for when you want better utilities for working with arrays but you might not want to pull in all the dependencies of dtype-next - cool stuff!#2021-11-2401:47athos@UEENNMX0T Hi, thanks! The only thing we can do for that is type checking, so I didn’t give it much priority. But from the completeness point of view, it might be good to add it.
@UFTRLDZEW Yeah, dtype-next is powerful and useful but could sometimes be overkill. This library can be used for little Java interop things like varargs method calls.#2021-11-2316:00Alex Miller (Clojure team)https://github.com/clojure/core.async 1.5.640 is now available (all fixes in both CLJ and CLJS):
• https://clojure.atlassian.net/browse/ASYNC-204 On put to closed channel, commit handler to allow pending alt ops to be cleaned up
• https://clojure.atlassian.net/browse/ASYNC-235 Fix ioc-macros/return-chan registers a callback with incorrect arity
• https://clojure.atlassian.net/browse/ASYNC-144 Tweak docstring in pipeline-async
• https://clojure.atlassian.net/browse/ASYNC-238 Fix a/map with empty chan vector hangs
Several of these are important bug fixes and I would recommend updating.#2021-11-2316:48Ben SlessThank you!#2021-11-2316:04Alex Miller (Clojure team)https://github.com/clojure/spec.alpha 0.3.214 is now available:
• https://clojure.atlassian.net/browse/CLJ-2606 Add support to transform trailing maps on instrumented functions into kvs (really only relevant for 1.11.0-alpha1+)#2021-11-2316:05Alex Miller (Clojure team)(same change applied to spec 2 as well, but no releases there)#2021-11-2316:51cyppanBy the way, do you have any info about the state / roadmap of spec2?#2021-11-2321:57Alex Miller (Clojure team)no, sorry#2021-11-2319:51Alex Miller (Clojure team)Clojure https://clojure.org/releases/devchangelog#v1.11.0-alpha3 is now available:
• https://clojure.atlassian.net/browse/CLJ-2667 Add functions to parse a single long/double/uuid/boolean from a string
• https://clojure.atlassian.net/browse/CLJ-2668 Add NaN? and infinite? predicates
• https://clojure.atlassian.net/browse/CLJ-1925 Add random-uuid
• https://clojure.atlassian.net/browse/CLJ-2664 Add clojure.java.math namespace, wrappers for java.lang.Math
• https://clojure.atlassian.net/browse/CLJ-2666 Make Clojure Java API javadoc text match the example
• https://clojure.atlassian.net/browse/CLJ-1360 Update clojure.string/split docstring regarding trailing empty parts
• https://clojure.atlassian.net/browse/CLJ-2249 Clarify clojure.core/get docstring regarding sets, strings, arrays, ILookup
• https://clojure.atlassian.net/browse/CLJ-2488 Add definition to reify docstring
• https://clojure.atlassian.net/browse/CLJ-1808 map-invert should use reduce-kv and transient
• https://clojure.atlassian.net/browse/CLJ-2065 Support IKVReduce on SubVector
• Update dep to spec.alpha (0.3.214)#2021-11-2320:57borkdude@U04V70XH6 are you already running it in production ;-)?#2021-11-2321:16seancorfieldWe'll have it in QA by end of day. Our next backend production build will be next week 🙂#2021-11-2321:16seancorfield(a bunch of folks are off this week due to Thanksgiving)#2021-11-2321:52Alex Miller (Clojure team)Docs for new things:
• https://clojure.github.io/clojure/branch-master/clojure.java.math-api.html namespace (many fns)
• https://clojure.github.io/clojure/branch-master/clojure.core-api.html#clojure.core/parse-long
• https://clojure.github.io/clojure/branch-master/clojure.core-api.html#clojure.core/parse-double
• https://clojure.github.io/clojure/branch-master/clojure.core-api.html#clojure.core/parse-boolean
• https://clojure.github.io/clojure/branch-master/clojure.core-api.html#clojure.core/parse-uuid
• https://clojure.github.io/clojure/branch-master/clojure.core-api.html#clojure.core/NaN?
• https://clojure.github.io/clojure/branch-master/clojure.core-api.html#clojure.core/infinite?
• https://clojure.github.io/clojure/branch-master/clojure.core-api.html#clojure.core/random-uuid#2021-11-2322:08seancorfieldLooking forward to retiring some of our conversion/parsing functions in favor of these new built-in ones!#2021-11-2403:01Vincent CantinThe parse functions are right on time for this year's Advent of Code 💯#2021-11-2403:06seancorfield@U8MJBRSR5 How do those make it easier? You can mostly just call the parse* JVM functions. A bit more effort since you'd need try/`catch` but it doesn't make anything completely new possible, just more convenient.#2021-11-2403:30Vincent CantinSame as what you mentioned, I am looking forward to retire https://github.com/green-coder/advent-of-code-2020/blob/master/src/aoc/util.clj#L22-L29.#2021-11-2403:39seancorfieldThat function isn't the same at all:
user=> (parse-long "\n 18 15 \n")
nil
user=> (parse-long "\n \"18\" 15 \n")
nil
user=> (require '[clojure.edn :as edn])
nil
user=> (edn/read-string "\n 18 15 \n")
18
user=> (edn/read-string "\n \"18\" 15 \n")
"18"
user=>
#2021-11-2403:54Vincent CantinYes, I know.#2021-11-2411:18imreSome functions in the math namespace result in reflection warnings:
Loading /Users/ikoszo/.m2/repository/org/clojure/clojure/1.11.0-alpha3/clojure-1.11.0-alpha3.jar!/clojure/java/math.clj...
Reflection warning, /Users/ikoszo/.m2/repository/org/clojure/clojure/1.11.0-alpha3/clojure-1.11.0-alpha3.jar!/clojure/java/math.clj:362:3 - call to static method abs on java.lang.Math can't be resolved (argument types: unknown).
Reflection warning, /Users/ikoszo/.m2/repository/org/clojure/clojure/1.11.0-alpha3/clojure-1.11.0-alpha3.jar!/clojure/java/math.clj:373:3 - call to static method max on java.lang.Math can't be resolved (argument types: unknown, unknown).
Reflection warning, /Users/ikoszo/.m2/repository/org/clojure/clojure/1.11.0-alpha3/clojure-1.11.0-alpha3.jar!/clojure/java/math.clj:384:3 - call to static method min on java.lang.Math can't be resolved (argument types: unknown, unknown).
Reflection warning, /Users/ikoszo/.m2/repository/org/clojure/clojure/1.11.0-alpha3/clojure-1.11.0-alpha3.jar!/clojure/java/math.clj:556:3 - call to static method scalb on java.lang.Math can't be resolved (argument types: double, unknown).
Loaded
Is this by design?#2021-11-2411:19imreWe had this with Math/abs previously and ended up using clojure.math.numeric-tower/abs instead.#2021-11-2411:20imre(in cases where we couldn't type-hint the call due to having to handle both long and double)#2021-11-2412:09orestisWoo I originally suggested convenience number parsing specifically for advent of code :smiling_face_with_3_hearts:#2021-11-2413:23Alex Miller (Clojure team)@U08BJGV6E no - how are you seeing that?#2021-11-2413:24imre(set! *warn-on-reflection* true), then load the clojure.java.math ns into the repl#2021-11-2413:26Alex Miller (Clojure team)Hrm#2021-11-2413:26borkdudecan't repro.
$ clj
Clojure 1.11.0-alpha3
user=> (set! *warn-on-reflection* true)
true
user=> (require 'clojure.java.math)
nil
Perhaps you're using java 17?#2021-11-2413:26imrerequire won't reload an already loaded ns#2021-11-2413:26imreI went to the actual ns file and did a load to repl editor command#2021-11-2413:27borkdudeuser=> (require 'clojure.java.math :reload)
nil
#2021-11-2413:27imreI haven't tried but I'm assuming re-evaluating those fns one by one would result in the same#2021-11-2413:27imrehmm#2021-11-2413:27Alex Miller (Clojure team)I don't see why#2021-11-2413:28borkdudeWhat Java version are you using#2021-11-2413:28imre17#2021-11-2413:28imrelet me try on 11#2021-11-2413:28borkdudeI also can't repro with Java 17 but I have seen one reflection issue before when upgrading when another same-arity/different-type overload got added.#2021-11-2413:33imreClojure 1.11.0-alpha3
user=> (set! *warn-on-reflection* true)
true
user=> (ns
^{:author "Alex Miller",
:doc "Clojure wrapper functions for java.lang.Math static methods.
Function calls are inlined for performance, and type hinted for primitive
long or double parameters where appropriate. In general, Math methods are
optimized for performance and have bounds for error tolerance. If
greater precision is needed, use java.lang.StrictMath directly instead.
For more complete information, see:
"}
clojure.java.math
(:refer-clojure :exclude [min max]))
nil
clojure.java.math=> (defn abs
{:doc "Returns the absolute value of a (long or double).
If not negative, a is returned, else negation of a is returned.
If a is Long/MIN_VALUE => Long/MIN_VALUE
If a is a double and zero => +0.0
If a is a double and ##Inf or ##-Inf => ##Inf
If a is a double and ##NaN => ##NaN
See: "
:inline-arities #{1}
:inline (fn [a] `(Math/abs ~a))
:added "1.11"}
[a]
(Math/abs a))
Reflection warning, /Users/ikoszo/Library/Application Support/JetBrains/IdeaIC2021.3/scratches/math.clj:362:3 - call to static method abs on java.lang.Math can't be resolved (argument types: unknown).
#'clojure.java.math/abs
clojure.java.math=>
on java 11#2021-11-2413:34imreI can see why this could happen - inside the abs fn, there is no information about a that could help the compiler choose the right method to call#2021-11-2413:36borkdudeyep, that reproduces it for me#2021-11-2413:37imreIf I open the ns in Cursive, it will highlight this#2021-11-2413:37imreDue to our previous adventure with abs I was really interested how this would be solved in the new ns, which is why I started poking around#2021-11-2413:39borkdudeIt's the same thing some array based function in clojure.lang.RT, you can't really avoid reflection here unless you enumerate all possible input types and make special cases for them#2021-11-2413:39borkdudebut then you're basically already doing the reflection yourself#2021-11-2413:42imreWell, I don't have a solution, but it was surprising to see a reflection warning from a core ns. And according to Alex it wasn't intentional#2021-11-2413:46Alex Miller (Clojure team)This call is inlined, so it doesn't actually matter#2021-11-2413:47borkdudeunless you're using it as a higher order function for example#2021-11-2413:47borkdudebut then you can still add a type hint in the surrounding code#2021-11-2413:48imreWhile I'm not familiar with the concept of inlining in clojure, wouldn't it still result in reflection use when invoking (Math/abs a)?#2021-11-2413:48borkdudeNot if you do: (let [a 1] (Math/abs a))#2021-11-2413:48borkdudesince the type of a is known in that context#2021-11-2413:49imreWhat if the only thing I know about a is that it's a number?#2021-11-2413:49borkdudeclojure.java.math=> (let [a 1] (abs a))
1
clojure.java.math=> (defn foo [a] (abs a))
Reflection warning, NO_SOURCE_PATH:1:15 - call to static method abs on java.lang.Math can't be resolved (argument types: unknown).
#'clojure.java.math/foo
#2021-11-2413:49borkdudeThen the compiler doesn't have enough information to select the method#2021-11-2413:52imreI wonder if using https://github.com/clojure/math.numeric-tower/blob/master/src/main/clojure/clojure/math/numeric_tower.clj#L104 keeps being superior in those cases?#2021-11-2413:53borkdudeOne could also wonder what (clojure.java.math/abs 1) gives over (Math/abs 1), I mean, it's not like the interop was hard to type?#2021-11-2413:57borkdudeAt least we get auto-complete for those functions in editors that have not so good Java support ;)#2021-11-2413:58imreI'd consider it a good value add if clojure.java.math could solve those reflection warnings 🙂#2021-11-2414:02Alex Miller (Clojure team)As has been discussed in #clojure-dev and the ticket, discoverability and avoiding interop were motivations#2021-11-2414:03Alex Miller (Clojure team)The numeric-tower impl relies on multimethods and boxing and other stuff that are not a good base for performance#2021-11-2414:04borkdudeGood points. Making these wrappers also helps beginners that are not so familiar with the JVM (discoverability)#2021-11-2414:04imreah, thanks for the pointer, I see there's a very similar discussion happening there#2021-11-2414:05imreWould it make sense though to point out in the docstrings that reflection warnings are somewhat expected for these fns?#2021-11-2414:07borkdudeI think making it clojure.math and the same in CLJS would help discoverability and beginners even more. So :thumbsup: from me so far on that idea.#2021-11-2400:01Lukas DomagalaTiny new library to macroexpand-all from clojurescript code
https://github.com/Cyrik/cljs-macroexpand#2021-11-2411:50flowthingTutkain 0.11.0 (alpha), a Clojure plugin targeting the socket REPL for Sublime Text, is out.
Change log: https://github.com/eerohele/Tutkain/blob/6919e340a767c0b54bb8fe3629cdb205da9351f7/CHANGELOG.md#0110-alpha---2021-11-23#2021-11-2413:17amarhttps://github.com/xfthhxk/unminify: unminifies JS stacktraces
* CLI can now be installed via npm
* Configurable Docker https://hub.docker.com/repository/docker/xfthhxk/unminify targeted at Google Cloud Platform
- Exposes an endpoint to accept JS error info
- Uses source map to unminify stacktrace and write to Error Reporting#2021-11-2416:32timo#2021-11-2522:57Lukas Domagalaomni-trace v0.2.0 released, now with zoomable/pannable flamegraphs and better cljs file handling
https://github.com/Cyrik/omni-trace#2021-11-2616:32jerger_at_ddaWe just released our new c4k-nextcloud module with proud.
c4k-nextcloud is intended for small nextcloud installations on a cheap single node k8s cluster.
We use this setup in production, backup is included, your stars will be in favor 🙂
https://gitlab.com/domaindrivenarchitecture/c4k-nextcloud
#clojure #k8s #devops #nextcloud#2021-11-2720:04lreadhttps://github.com/lread/test-doc-blocks v1.0.166-alpha - Test AsciiDoc and CommonMark code blocks found in articles and docstrings
• Added traditional main invocation as an alternative to -X invocation for more a more general purpose entry point
• See https://github.com/lread/test-doc-blocks/blob/main/CHANGELOG.adoc#v10166-alpha for details and other changes
• Drop by in #test-doc-blocks should you want to chat!#2021-11-2720:10Cora (she/her)ooooh very cool!#2021-11-2720:11seancorfieldHoneySQL uses this so that all the documentation is tested!#2021-11-2720:11Cora (she/her)this might deserve to be in the alternatives section? https://github.com/hyperfiddle/rcf#2021-11-2720:13lreadYeah, certainly related @U02N27RK69K, thanks!#2021-11-2720:13Cora (she/her)👍👍👍#2021-11-2720:14dominicmThere's been a few updates to https://github.com/juxt/clip, we're now on 0.26.0. This release marks the end of my worries that Clip will have any major breaking changes, I believe it is now very close to outgrowing its alpha status.
Clip is a dependency injection library similar to Integrant and Component. Its aim is to "clip on" to your existing program without requiring multi-methods or protocols. The rationale in the README explains this in a lot of detail.
Changes in the last few releases:
• BREAKING: symbols are no longer resolved to functions for :executor and :deref, you now need to call juxt.clip.edn/load manually
• AOT
◦ There's a new require function which will require the namespaces for a system to start or stop
◦ I'm aiming for Clip to work inside GraalVM, but I haven't yet given this a go. Please let me know.
• Testing
◦ You can now start a subset of a system, so you can start a handler and its dependencies
◦ You can select a subset of a system, and perform any operation on that (like select-keys for a system)
◦ There's a new macro with-system which will run a code block with a system started and attempt to clean it up afterwards
• :resolve is now only called once, rather than on every reference
• Documentation got a makeover
In the future, I'd like to look at opening up the operations on a system to user customization. I'm no longer interested in suspend/resume, but I'd like to allow that to be implemented in user space. I'd also like to continue the work I did on "indirect linking," which allows you to re-eval a ring handler and not need to restart your system.#2021-11-2800:11seancorfieldhttps://github.com/seancorfield/honeysql 2.1.829 -- Turn Clojure data structures into SQL -- bug fixes for :not and :nest; enhancements for :add-column and :drop-column; various doc/build/test enhancements too (including automatically building, testing, and releasing to Clojars when a new release is created on GitHub)#2021-11-2813:54borkdudetools-deps-native 0.0.5 is out which can be used as a pod with #babashka
Run tools-deps-alpha as a native binary.
https://github.com/babashka/tools-deps-native/releases/tag/v0.0.4
New:
• Windows support
• Available in the pod registry
Example usage as pod:
(require '[babashka.pods :as pods])
(pods/load-pod 'org.babashka/tools-deps-native "0.0.5")
(require '[clojure.tools.deps.alpha :as tda])
(->> (tda/create-basis {:project "deps.edn"
:extra '{:deps {buddy/buddy-core {:mvn/version "1.10.1"}}}})
:classpath-roots
(take 2))
;;=> ("src" "/Users/borkdude/.m2/repository/buddy/buddy-core/1.10.1/buddy-core-1.10.1.jar")
You can also use it with tools.bbuild which is designed to work with tools-deps-native.
https://github.com/babashka/tools.bbuild
Use with caution as these projects are still marked as experimental, although all tools.build tests pass.
Join #babashka for discussion.#2021-11-2820:22borkdudeA new version of babashka/fs : file system util library (mostly based on java.nio).
https://github.com/babashka/fs/blob/master/CHANGELOG.md
v0.1.2
• Add `with-temp-dir` macro https://github.com/babashka/fs/issues/37 (https://github.com/hugoduncan)
• Add `fs/home` and `fs/expand-home` https://github.com/babashka/fs/issues/12 https://github.com/babashka/fs/issues/13 (https://github.com/Kineolyan)
• Improve `which` on Windows: take into account `.com`, `.exe`, `.bat.`, `.cmd` when searching for program
v0.1.1
• Allow raw pattern to be passed to `fs/match` https://github.com/babashka/fs/issues/32
• unzip: entry in dir can come before dir in zip entries https://github.com/babashka/fs/issues/35#2021-11-2911:25borkdude#babashka 0.6.6 (2021-11-29)
Summary changelog:
• Resolve program in `babashka.process` on Windows using known extensions. This means you can now invoke `(shell "yarn")` and it will work on both Unix-like systems and Windows.
• Add `babashka.core` namespace with `windows?` predicate.
• Add `fs/with-temp-dir` to `babashka.fs` (https://github.com/hugoduncan)
• Add `fs/home` and `fs/expand-home` to `babashka.fs` (https://github.com/Kineolyan)
• Add classes to support running the https://github.com/cgrand/xforms library from source:
• babashka.curl: support `:as :bytes` option to download binary file
• Add compatibility with https://github.com/gnarroway/hato and https://github.com/clj-commons/clj-http-lite insecure feature by adding classes
• clojure.core/read improvements: support `:eof` + `:read-cond`
• Add support `*read-eval*`, `*default-reader-fn*` and `*reader-resolver*` dynamic vars to be used with `clojure.core/read`.
• Add `SQLITE` feature flag (https://github.com/nikvdp)
See full changelog here: https://github.com/babashka/babashka/blob/master/CHANGELOG.md#2021-11-2914:49Noah BogartThank you for babashka.fs. it’s the best file system library in clojure.#2021-11-2918:13Lukas Domagalav0.2.2 of https://github.com/Cyrik/omni-trace: added automated deeptracing for clojure and clojurescript
(require '[cyrik.omni-trace :as o])
;; uncomment to also trace clojure.core, tested with testing-ns only
;; (require '[cyrik.omni-trace.instrument :as i])
;; (reset! i/ns-blacklist [])
(o/run-traced 'cyrik.omni-trace.testing-ns/run-machine)
;; run this for cljs
;; (o/run-traced-cljs 'cyrik.omni-trace.testing-ns/run-machine)
(tap> (o/rooted-flamegraph 'cyrik.omni-trace.testing-ns/run-machine))
next will either be better portal or better editor integration, wish me luck#2021-11-2921:44Daniel SlutskyNotespace, a tool for seeing your namespace in a notebook, is gradually maturing in its current form, the so-called Notespace v4 (alpha).
This short video overviews its current main ideas and features: https://youtu.be/uICA2SDa-ws
Many thanks to the friends at Scicloj for testing it and brainstorming about it.#2021-11-3010:49Lukas Domagala@U066L8B18 looks great. I’d love to hear a little more on the differences to tools in the same space, especially clerk.
the other thing I’m interested in is how notebook allows new views to be defined that have user-space defined interactions, but I guess that should happen in a different thread.#2021-11-3010:55Daniel SlutskyThanks, @U02EMBDU2JU, good questions.
One good place to discuss it is the notespace topic thread at the data-science Zulip stream:
https://clojurians.zulipchat.com/#narrow/stream/151924-data-science/topic/notespace
We are planning to have a session about these topics at the coming Clojure Data Science day.
https://clojureverse.org/t/re-clojure-data-science-special-dec-5th-2021/#2021-11-3007:12robert-stuttafordNot sure if this is appropriate to ask of all of you, but I figure, what the heck, exposure could only help our cause 😁 RTs welcome!
https://twitter.com/RobStuttaford/status/1465577349018226688#2021-11-3007:42borkdudeRetweeted. Hope more people will follow.#2021-11-3022:53Jacob RosenzweigWhat happens when the pro trial is lost? Does the entire slack get shut down?#2021-11-3022:57borkdudeNo, it will become as before, just no history#2021-12-0107:27mbjarlandBack a few years ago I actually contacted slack with this exact question about open source non-profit communities and clojurians specifically. Response was essentially “we don’t give a crap”…so yeah…#2021-12-0107:32mbjarlandquoting part of the response in 2018:
> … That said, while we’ve has some interest in a version of “community paid plans” at present we have no plans to change our pricing levels.
but who knows…might be worth pinging them again. Back then they did have a non-profit plan which gave a 85% discount (still too expensive) but a community like ours did not meet the criteria at the time.
I’ll probably reach out to them again and see if that answer is still valid.#2021-12-0107:36pezThe bet here is that they will just let us be on the Pro plan w/o charging at all.#2021-12-0107:38robert-stuttafordthe actual Slack CEO is looking into it at the moment 😄#2021-12-0107:39mbjarlandI suspect we will either have to actively cancel or we get a bill for 100k or whatever the monthly is…I’m on a chat with them now to ask#2021-12-0107:40robert-stuttaford@U4VDXB2TU, the Slack CEO responded to my tweet, he's looking into it!#2021-12-0107:40robert-stuttafordhttps://twitter.com/stewart/status/1465938156977463301#2021-12-0107:41mbjarlandnice!
ok I’ll shut down my grunt level communications channel then : )#2021-12-0107:42robert-stuttaford😄 😄#2021-12-0107:52mbjarlandI’m having twitter issues…but might be good if as many as possible could go hit like on that reply from the slack ceo#2021-12-0107:53mbjarlandas an indication of interest#2021-12-0119:48Jacob RosenzweigHey, if stewart wants to keep this slack alive, I'm all for it. I really like the app but their sales strategy kills non-profit use.#2021-12-0119:49Jacob RosenzweigThey should make it easier for non-profit communities to use it. That's how you keep general public interest in the product alive.#2021-12-0105:04tony.kayGuardrails 1.1.9 released to clojars. This release includes clj-kondo configuration for improved source-level checking, thanks to @mroerni
https://github.com/fulcrologic/guardrails#2021-12-0105:08tony.kayFulcro RAD 1.1.0-RC8 Released. This release modifies the provided network request transform to make things work better with Pathom 2 and 3 out of the box.
https://github.com/fulcrologic/fulcro-rad#2021-12-0106:58robert-stuttafordhttps://twitter.com/stewart/status/1465938156977463301
holding thumbs, folks!#2021-12-0112:45Alex Miller (Clojure team)If it would help to connect to Nubank somehow (we have a large corporate Slack account), I'm happy to try to find the right connnection#2021-12-0112:45borkdudePerhaps it would help if you replied to that tweet directly with this info?#2021-12-0114:23robert-stuttafordthanks Alex! let's see what my new pal Stewart cooks up, first 😁#2021-12-0114:21plexusNew releases of Witchcraft (https://github.com/lambdaisland/witchcraft) and Witchcraft-plugin (https://github.com/lambdaisland/witchcraft-plugin). Plug your REPL into Minecraft and go! This makes things compatible with Minecraft 1.18 which came out yesterday.#2021-12-0114:21plexusDemonstration: https://www.youtube.com/watch?v=ZP4KEPziObA#2021-12-0114:28Noah Bogartthis is cool as hell!#2021-12-0114:30plexusCome hang out in #minecraft or join the lambda island discord if you want to find fellow witchcrafters https://discord.gg/pCuZBDRruW#2021-12-0114:34ericdalloclojure-lsp New https://clojure-lsp.io/ version released: https://github.com/clojure-lsp/clojure-lsp/releases/tag/2021.12.01-12.28.16 🚀
A lot of new features and improvements, the main highlights are:
• Stub generation using new https://github.com/clj-easy/stub library, making it possible to clojure-lsp know about closed source libraries, like for example, datomic.api ✨
• Check the gif of one of the new code actions: Sort map
This release was supported by https://www.clojuriststogether.org/ clojurists-together 💜 clojure-lsp
For more information, check #lsp#2021-12-0114:37robert-stuttafordmusical!#2021-12-0207:09StefanThis also includes the fix for poly / mono repos right? That’s also definitely noteworthy :)#2021-12-0207:11robert-stuttafordyeah that's actually pretty huge!#2021-12-0115:54Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.10.3.1040 is now available
• Add clj -X:deps list for listing the full transitive set of deps and license info - see https://clojure.github.io/tools.deps.alpha/clojure.tools.cli.api-api.html#clojure.tools.cli.api/list
• Improved error handling for unknown tool with -T or -X:deps find-versions
• Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.12.1084#2021-12-0115:55Alex Miller (Clojure team)Example output from core.async#2021-12-0115:56Alex Miller (Clojure team)This list function is still a wip, so happy for any feedback if you see anything wonky#2021-12-0116:08robert-stuttafordlist is really useful, thank you for this!#2021-12-0116:20Alex Miller (Clojure team)🙇#2021-12-0116:29pezDo I understand correctly that this calls for an update of this answer? https://ask.clojure.org/index.php/11268/tools-deps-how-list-dependencies-and-their-versions-from-repl#2021-12-0116:40Alex Miller (Clojure team)not really, that's asking about doing it at the repl#2021-12-0116:45pezYeah, I remember now that that was important for what I was doing then… 😃#2021-12-0116:47Alex Miller (Clojure team)there will in the future be better ways to answer that question too, but this isn't it :)#2021-12-0116:51pezSounds great!#2021-12-0116:53pezWe had a question in #calva about how to list all namespaces, also from transitive deps. Maybe those future better ways will make that easier?#2021-12-0121:15Lukas Domagala@U0ETXRFEW can't you already get that info from clj-kondo? It's running in lsp anyway and lsp is dumping that info to disk on startup#2021-12-0121:20slipsetThere is a lein plugin that does the license thing and it allows for export to edn and csv. The latter was really useful once as I could just use that to send off a excel file to a PHB.#2021-12-0121:30pez@U02EMBDU2JU this was also a thing to do from the REPL. But, yes, in a Calva context it might work. #2021-12-0123:23Alex Miller (Clojure team)@U04V5VAUN the -X:deps list above has a :format :edn export option#2021-12-0217:26dominicmDoes the license code only work for maven right now?#2021-12-0217:26dominicmI can't see an impl for, e.g. deps.edn#2021-12-0217:30Alex Miller (Clojure team)no, will not yet work for git or local deps projects#2021-12-0217:31Alex Miller (Clojure team)that is pending some more design work#2021-12-0217:31dominicmhttps://github.com/licensee/licensee ported to clojure? 😄#2021-12-0217:33Alex Miller (Clojure team)planning to avoid needing something like that :)#2021-12-0116:18pezCalva v2.0.227 just out. It contains a fix for finding test symbols with + (and other regex special characters) in them, signed @marc-omorain. Thanks! ❤️ It also contains the fruits of my rather heavy labour of the last month or so, trying to convince VS Code that it can do Parinfer. https://calva.io/parinfer/ It is disabled by default and considered experimental. As part of it, there is a new “aggressive” format-as-you-type setting which is part of Parinfer mode, but it can be used separately. It is also considered experimental and disabled by default. See https://calva.io/formatting/#configuration for how to enable.#2021-12-0116:20robert-stuttafordheck, great job wrestling that pig, @U0ETXRFEW!#2021-12-0116:20pezA note about Calva’s take on Parinfer, that might be of extra importance: It is designed to be used together with Calva Paredit.#2021-12-0116:21pezIf someone wants to read about some of the pig wrestling: https://twitter.com/pappapez/status/1461018167002734592#2021-12-0212:34pezThe wrestling continues: https://twitter.com/pappapez/status/1466371655840763911?s=20
> TL;DR: Version .228 replaces .227, keeping the non-Parinfer-experiment improvements, but removing the experiment.
There was a worrying error report in the #calva channel, and I decided that asking people to please stay on .227 has to suffice for now. Please stay on .227 unless you see experience blocking issues that you think has to do with the experiment code. And if you run into such problems, please report in #calva or on Github. I need clues!#2021-12-0117:57delaguardohttps://github.com/DeLaGuardo/setup-clojure
new release of setup-clojure GitHub action.
• Use install-linux.sh script for Ubuntu and MacOS
• Use action version as a part of cache key#2021-12-0119:51borkdudeWith all those beautiful releases today, I cannot stay behind! clj-kondo
clj-kondo 2021.12.01 ✨
• Improve linting in `extend-protocol`, `extend-type`, `reify`, `specify!` https://github.com/clj-kondo/clj-kondo/issues/1333, https://github.com/clj-kondo/clj-kondo/issues/1447
• Support `:context` in nodes in hooks for adding context to analysis https://github.com/clj-kondo/clj-kondo/issues/1211
• goog.object, `goog.string` etc must be required before use in newer releases of CLJS https://github.com/clj-kondo/clj-kondo/issues/1422
• Resume linting after invalid keyword https://github.com/clj-kondo/clj-kondo/issues/1451
• Fix install script for relative dir opts https://github.com/clj-kondo/clj-kondo/issues/1444
• Fix type mismatch error with auto-qualified keyword https://github.com/clj-kondo/clj-kondo/issues/1467
• String type hint causes false error report https://github.com/clj-kondo/clj-kondo/issues/1455
• Fix false positive with cljs/specify! https://github.com/clj-kondo/clj-kondo/issues/1450
• Improve analysis for ns-modifying destructuring key https://github.com/clj-kondo/clj-kondo/issues/1441
• CLJS `(exists? foo.bar/az)` complains about require https://github.com/clj-kondo/clj-kondo/issues/1472
clj-kondo 2021.12.16
A pretty big release with several new linters, options and improvements!
New
• Automatically load configurations from `.clj-kondo///config.edn`. This can be disabled with `:auto-load-configs false`. https://github.com/clj-kondo/clj-kondo/issues/1492
• Add linter `:duplicate-case-test-constant`: detect duplicate case test constants. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#duplicate-case-test-constant. https://github.com/clj-kondo/clj-kondo/issues/587 (https://github.com/mknoszlig)
• Add linter `:unexpected-recur`: warn on `recur` in unexpected (non-tail) position. https://github.com/clj-kondo/clj-kondo/issues/1126
• Add linter `:used-underscored-binding`: warn on used bindings that start with underscore. Disabled by default. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#used-underscored-bindings. https://github.com/clj-kondo/clj-kondo/issues/1149 (https://github.com/mknoszlig)
• Add linter `:docstring-blank` for checking empty docstring. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#docstring-blank. https://github.com/clj-kondo/clj-kondo/issues/805 (https://github.com/joodie)
• Add linter `:docstring-leading-trailing-whitespace` for checking leading and trailing whitespace in docstring. Disabled by default. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#docstring-leading-trailing-whitespace. https://github.com/clj-kondo/clj-kondo/issues/805 (https://github.com/joodie)
• Add linter `:docstring-no-summary` for checking the absence of summary of args in docstring. Disabled by default. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#docstring-no-summary. https://github.com/clj-kondo/clj-kondo/issues/805 (https://github.com/joodie)
• Add `:exclude-defmulti-args` option for `:unused-bindings` linter. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md. https://github.com/clj-kondo/clj-kondo/issues/1188 (https://github.com/mknoszlig)
• Support `:config-in-comment` https://github.com/clj-kondo/clj-kondo/issues/1473. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/config.md#override-config-in-comment-forms.
Enhanced
• Bump built-in cache for clojure 1.11.0-alpha3 and `clojure.data.json`
• Reword `:refer` suggestion so you can copy paste it https://github.com/clj-kondo/clj-kondo/issues/1293 (https://github.com/vemv)
• Add re-frame analysis output https://github.com/clj-kondo/clj-kondo/issues/1465 (https://github.com/benedekfazekas)
• Qualified map causes too many arguments in type checker https://github.com/clj-kondo/clj-kondo/issues/1474
• Handle reader conditional with unknown language https://github.com/clj-kondo/clj-kondo/issues/970
#2021-12-0119:57pezHaha, you are not allowing us to keep up the slightest!#2021-12-0122:43lreadThere’s no sense in even trying to keep up with the borkdudes! simple_smile#2021-12-0217:35msolliNew version of https://github.com/msolli/proletarian, a durable job queuing and worker system for Clojure backed by PostgreSQL: https://github.com/msolli/proletarian/blob/main/CHANGELOG.md#1054-alpha---2021-12-02
This version features some improvements with how certain exceptions are handled, as well as some API polish. There is one breaking change in that regard: The retry-strategymultimethod has been replaced by a :proletarian/retry-strategy-fn option for proletarian.worker/create-queue-worker .
Follow-up in #proletarian.#2021-12-0219:17robert-stuttafordgood news, everyone: Slack has sponsored a Pro account for this fine community :-)#2021-12-0219:24wilkerlucioawesome!! really happy for this 😄#2021-12-0219:24wilkerluciothank you @U0509NKGK for pushing on this: https://twitter.com/RobStuttaford/status/1465577349018226688 🙏#2021-12-0219:27seancorfieldNote: it is for one year only -- we have to reapply each year (which we shall do).#2021-12-0219:30borkdude🙏 🙏 🙏#2021-12-0219:30athomasoriginalThis is huge! Just last night I had a Q and I knew it would have been asked in Clojurians…3 pages deep I found it! Blessings 🙏#2021-12-0219:31colinkahnNice!#2021-12-0219:31jjttjjAmazing!#2021-12-0219:41tolitius@U0509NKGK ❤️#2021-12-0219:43noogajust saw this on twitter, amazing!#2021-12-0220:06eggsyntaxShe's not a Clojurian so may never see this, but public thanks to Kiere Shaffer from the Asheville dev community, who clued us in that tweeting directly at the Slack CEO had worked for another large community she's part of. 🙏#2021-12-0221:46just.sultanov@U0509NKGK amazing!!! 💪 thank you a lot#2021-12-0315:36mbjarlandWow. Did not expect this outcome. Awesome job @U0509NKGK ! This has been a long time coming.
As a side note, here is the grunt-level response I received today from slack support:
If your question is about pricing for community teams then I'm so sorry but the answer would still be the same as when you last chatted to us. There is currently no pricing plans that differ from our business plans for community workspaces.
: ) +1 for skipping up the org chart to the absolute top @U0509NKGK :punch:#2021-12-0316:17robert-stuttafordhigh five!#2021-12-0316:59Thomas TayAwesome! This is great news#2021-12-0220:40vlaaadreveal https://vlaaad.github.io/reveal/ v1.3.250 and https://vlaaad.github.io/reveal-pro v1.3.293 are released!
This release brings a bunch of improvements to how you can interact with Reveal from your IDE, which unlocks a "sticker overlay" development workflow that is described in this introductory blog post: https://vlaaad.github.io/reveal-stickers
Follow up in this thread or in #reveal!#2021-12-0220:40vlaaadI'm curious to know what you think!#2021-12-0220:49phronmophobicthe sticker idea looks really neat! here's a few thoughts:
• for me, the caption is covered up by the player video controls
• the text in the videos is really small and hard to read unless I zoom in or go full screen
• when I first saw the custom stickers example, I thought it would take the comment block: (start!), (slurp) (stop) and automatically turn that into a UI. That might be a cool idea!#2021-12-0220:52Lukas DomagalaThat looks really awesome, love the idea! This looks like the killer feature that will make me start using reveal#2021-12-0220:55Lukas DomagalaHaven't even tried it yet, but I'm already thinking that a per project setting that restarts the same stickers of the last session would save a lot of time arranging them in the right spots#2021-12-0220:55vlaaad@U7RJTCH6J thank for the feedback! I'll try to improve video captions!#2021-12-0220:56phronmophobicwhat do you use for video editing?#2021-12-0220:56vlaaad"ScreenToGif" windows app#2021-12-0220:57phronmophobicah ok. I have some improvements in mind for my ffmpeg wrapper, so I'm curious what people are currently using.#2021-12-0220:58phronmophobicScreenToGif looks really solid#2021-12-0221:00vlaaad@U02EMBDU2JU thanks! I thought about automatically restored stickers. There are some problems with them that I couldn't solve yet — they accept any object in the JVM as an argument. It might be impossible to reconstruct these objects between JVM runs. For example, at the first JVM run you start a sticker that shows the status of database connection. Then you remove SQL dependency from the app and restart the JVM — how should Reveal behave?#2021-12-0221:05djblueReveal stickers look very slick! 🙌#2021-12-0221:43Lukas Domagala@U47G49KHQ I haven’t looked at the way you do your data connection, but I’m thinking stickers would be the most useful when watching an atom or a var. So reveal would restart with a “watch” of some kind for that var in that name space. If it never shows up again the user can always close that sticker.
I’m thinking of re-frame apps that would want to watch the db atom or like you said, a db connection or even an “in function” def for debugging.
if i just tap a map into it it’s probably not as interesting to see the same data on the second run, but who knows, the user can always close it.#2021-12-0319:06robert-stuttafordhttps://twitter.com/stewart/status/1466843623266283521#2021-12-0403:00just.sultanovI just published the first release of xtdb-tarantool. XTDB module which allows you to use Tarantool (in-memory computing platform).
https://github.com/sultanov-team/xtdb-tarantool#2021-12-0413:38refsetCool, congratulations! 🙂 I was ~unaware of Tarantool until you posted this, but it looks like a fascinating alternative to Redis & much more. As far as the integration with XT, I am excited by your roadmap on the readme:
> ✓ Add tx-log
> ❏ Add kv-store
> ❏ Add document-store#2021-12-0413:39refsetI'm somewhat surprised nobody has implemented RESP-compatibility for Tarantool yet, to attract more attention from Redis users (or at least I can't find such a thing). This brief comparison between Redis and Tarantool was helpful for me as the main docs are huge https://stackoverflow.com/questions/67481042/when-to-redis-when-to-tarantool#2021-12-0413:46refsetDoes this tx-log implementation already take into account the various WAL / clustering / synchronous transaction (etc.) configurations needed to provide HA & ACID durability for multiple XT nodes? Or are you only able to validate that once you have completed the other items further down in the roadmap (i.e. "Add an example of using a tarantool cartridge", and "Add an example of using a tarantool kubernetes operator (single node / cluster / with sharding")#2021-12-0417:05just.sultanovYes, I will be able to give more information after implementing the basic XTDB API and after developing the Tarantool cluster configuration using the tarantool-cartridge https://www.tarantool.io/en/doc/latest/getting_started/getting_started_cartridge/
In this solution I use the tarantool-cartridge java connector. Some information from the readme:
Java driver for Tarantool Cartridge for Tarantool versions 1.10+ based on the asynchronous Netty framework and official MessagePack serializer. Provides CRUD APIs for seamlessly working with standalone Tarantool servers and clusters managed by Tarantool Cartridge with sharding via vshard.
> Does this tx-log implementation already take into account the various WAL / clustering / synchronous transaction (etc.) configurations needed to provide HA & ACID durability for multiple XT nodes?
I tested only in a single node configuration. But I think it should work without any problems in a cluster mode.
The current version is an early-early alpha, probably even more like a PoC.#2021-12-0515:37dominicmhttps://github.com/juxt/pack.alpha has seen a major rewrite today, it's now compatible with tools.build and -T .
Pack is a way to convert your deps.edn projects into docker images, Lambda deployment packages, Self executable jars (like uberjars), or "skinny jars" (for libraries or java -cp deployments).
This release completely changes the namespaces, coordinate, and removes all the -main s that were previously present. The plan is to re-add new -main in the future on top of the new APIs (contributions welcome!).#2021-12-0515:59Ben Slessa. this is cool, will look for excuse to use it at work
b. just came across https://github.com/nanovms/ops, any thoughts on packing a unikernel?#2021-12-0516:01dominicmI haven't investigated unikernels at all. That project is in go, so I don't really have any thoughts about how to utilize it right now, it might work well with the skinnyjar mode though!#2021-12-0516:03Ben SlessJust like Clojure shells out to git, you could shell out to other tools written in less fortunate languages. Question is it's even worth the trouble from your perspective#2021-12-0518:12quollhttps://github.com/quoll/cljs-math is a reimplementation of the new clojure.java.math namespace in pure ClojureScript. This calls into js/Math for a few operations, but because java.lang.Math (and hence clojure.java.math) includes many more functions than are supported in JavaScript, many of the functions had to be implemented from scratch.
The namespace is implemented in a .cljc file so that testing can be done in Clojure to compare directly with the equivalent Java functions, but outside of testing it is only useful in ClojureScript.#2021-12-0519:21Noah BogartThis is great! I hope this can be bundled in the clojure math core library instead of as an outside library. #2021-12-0519:37quollIt’s specifically for ClojureScript.
It’s only a .cljc file for testing purposes. Once appropriate tests have been set up to compare java.util.Math results to native cljs results, then it will turn back into a .cljs file#2021-12-0519:39quollIt literally duplicates what java.lang.Math does, with some tweaks to make it work in ClojureScript#2021-12-0519:39Noah BogartRight, yes, I mean so clojure core can have built-in support for both clojure and clojurescript #2021-12-0519:41quollI think that the process is to get it accepted into ClojureScript#2021-12-0519:46Cora (she/her)that code is a super interesting read!!#2021-12-0519:56quollI can’t take credit. It’s transliterated from the JDK#2021-12-0519:57quollI just needed to deal with a few things. e.g. unsigned comparisons, and not being able to recast Doubles as ints to read the bits, etc#2021-12-0520:19quollNot being able to add Long values was a problem! I solved that with my own add64 function#2021-12-0520:19quollNot exactly elegant, but it got the job done 🙂#2021-12-0520:36Cora (she/her)well I think it's great, either way. you had to understand the gaps well enough to fill them and it's interesting how they got filled in 😊#2021-12-0610:39borkdudeA fast way to play with this :)
$ nbb -cp $(clojure -Spath -Sdeps '{:deps {com.github.quoll/cljs-math {:git/tag "v0.0.1" :git/sha "f92217e"}}}')
user=> (require '[cljs.math as m])
nil
user=> (clojure.repl/dir cljs.math)
<<
>>
>>>
E
IEEE-fmod
IEEE-remainder
MAX_FLOAT_VALUE
MIN_FLOAT_VALUE
...#2021-12-0610:41quollOops. I should have kept <<, >>, and >>> private!#2021-12-0610:42borkdudeAlready won something by posting that then ;)#2021-12-0610:46borkdudeBtw, impressive work!#2021-12-0618:20Matthew Davidson (kingmob)Manifold 0.2.3 is now out, featuring the new go-off macro, which is based off core.async/go. Also includes a bugfix adding bound-fn for let-flow.
Many, many thanks to Ryan Smith (@tanzoniteblack) for adding go-off to Manifold, and to the rest of Yummly for offering it back upstream.
https://github.com/clj-commons/manifold/blob/master/CHANGES.md#2021-12-0715:47ikitommi[metosin/malli "0.7.0"] is out! Malli is a data-driven data specification library for Clojure/Script. This release contains the following:
• 1-2 orders of magnitude faster Schema creation and transformation
• 2 orders of magnitude faster Schema inferring via the new mp/provider
• Cached Schema workers (validators, explainers, parsers, generators) for better DX
• Alternative cljfx style map-syntax for Schemas via the new SchemaAST protocol
• Default Schema registry can be swapped without tears (e.g. JVM-properties or CLJS Compiler options)
• Schema provider can infer :maybe and :map-of schemas
• Lot’s of bug fixes and small improvements
• Some breaking changes in the Extender API, read CHANGELOG for details
Thanks for clojurists-together for sponsoring the development of Malli and kudos to all contributors and testers, especially to @ben.sless for some mad perf stuff and reviews.
• code: https://github.com/metosin/malli
• release post: https://www.metosin.fi/blog/high-performance-schemas-in-clojurescript-with-malli-1-2/#2021-12-0717:18ikitommi[metosin/jsonista "0.3.5"] is out! Jsonista is a Clojure library for fast JSON encoding and decoding. This release updates the Jackson deps and adds support for ContextualDeserializer, making JSON decoding ~30% faster on the https://github.com/metosin/jsonista#performance. Special thanks to Tatu Saloranta (the creator of Jackson) for the help on this 🙇
https://github.com/metosin/jsonista#2021-12-0721:52Janne SauvalaTIL that Jackson was created by a Finn 😮#2021-12-0900:36quollhttps://github.com/quoll/cljs-math 0.1.0 is now out.
This includes a full set of generative tests to compare cljs-math implementations on ClojureScript to the equivalent JVM functions, and fixes a few inconsistencies and bugs from 0.0.1.
Special thanks to @borkdude for writing the ClojureScript repl access, and to @mfikes for detailed optimization advice.
https://github.com/quoll/cljs-math#2021-12-0914:35Alex Miller (Clojure team)would you like to contribute those tests to Clojure? would be happy to add them#2021-12-0915:55quollWell, they test that my implementations of the functions return the same values as the functions in java.lang.Math. (First, by running them on the JVM, and then by running them against a cljs repl). Since Clojure’s implementation is just a wrapper around java.lang.Math then I’m not sure that there’s much to contribute there?#2021-12-0915:56Alex Miller (Clojure team)well, that's why we didn't make them originally, but since you already did, would be happy to add the coverage#2021-12-0915:57Alex Miller (Clojure team)I can do the work to adapt them into the clojure test framework (not that much should be needed)#2021-12-0913:22harryvederciI'm creating a small Clojure dev library to record the inputs and outputs of functions.
It does a bunch of spying in functions in other namespaces, so I named it NSA - Namespace Agency 🙂
Old scenario:
• You're working on an API. To trigger a certain endpoint you have to execute 10 steps in a UI.
• You change some code. You manually execute the UI steps again. Repeat.
• At some point, you get tired of this and add a bunch of `(def x x)` lines to the function, and rerun it from there.
New scenario:
• You create a spy from the comfort of `<project root>/dev/user.clj`
• You execute the UI steps manually, once. The spy records the input and output.
• From then on you can:
◦ Get the first/last/nth result of calling the function, without actually calling it.
◦ Rerun the function with the latest input.
◦ Etc (anything you can think of, I guess)
It's based on / inspired by `tortue/spy`
Main differences with `tortue/spy`:
• It changes the actual function instead of creating a spy that wraps it.
• It has one atom containing the calls/responses of all spies, instead of 1 atom per spy.
Very very early stage, but feedback is welcome. Also let me know if this already exists.
Sauce: https://github.com/harryvederci/nsa#2021-12-0914:03delaguardoThank you! Sounds useful :) You might want to look at https://github.com/clojure/tools.trace
Maybe it can be useful for your library#2021-12-0914:05harryvederciWill do, thanks!#2021-12-0914:16Marc O'MorainWe have a similar library named Bond:
https://github.com/circleci/bond#2021-12-0914:16Marc O'Morain(require ‘[bond.james :as bond])#2021-12-0916:18kennyAnother similar one: https://github.com/vvvvalvalval/scope-capture.#2021-12-0916:25harryvederciThanks for the suggestions, I'll look into them to see how it fits in.
The main value nsa has for me personally is that I don't have to alter a function its code in order to "spy" on its input/output, which keeps the codebase uncluttered.
Values within a function can't be spied on with nsa (at least for now), but maybe if that's an issue it's an indicator that my functions are doing too much and that I have to split them up, after which I can unleash nsa on them again 🙂#2021-12-0916:56Jakub Holý (HolyJak)I appreciate the name! Though Bond is also a fine one :)#2021-12-0916:59harryvederciHaha, agreed! Thanks!#2021-12-0917:56metasoarousThis is the content I'm here for#2021-12-1002:05athosAnother similar one: https://github.com/athos/Postmortem
nsa’s API looks like a specialized version of instrument in Postmortem.#2021-12-1011:45Lukas Domagalai’m working on something similar: https://github.com/Cyrik/omni-trace
you start the spy/trace from the outside and can even capture all outgoing calls from the function and if you want everything inside the function. works for clojurescript as well. oh and you get a pretty flamegraph to view your data.
I guess i should extend docs and find a better spy name 😉#2021-12-1011:49harryvederciOof, that inner trace feature looks nice! 👀#2021-12-1011:52Lukas Domagalathe inner trace is 90% debux. i just modified debux to be able to actually save the trace instead of printing and added a way to wrap the debux call around an existing function. there is no visualization for it yet, but you can just look at the output in the instrument/workspace atom.
i’d love some more user feedback so if anything is missing i’m open to suggestions#2021-12-1010:20otfrom0-day exploit in the popular Java logging library log4j2 was discovered that results in Remote Code Execution (RCE) by logging a certain string. https://www.lunasec.io/docs/blog/log4j-zero-day/#2021-12-1010:21otfromlots of logging libraries use log4j at the bottom#2021-12-1014:10eggsyntaxGreat choice to post, thank you!#2021-12-1017:55zaneMight even be worth editing the original message to give a summary given how severe this is. People might not click through.#2021-12-1315:11henryw374I bumped log4j2 deps in https://github.com/henryw374/clojure.log4j2
... not sure if anyone apart from me using it 🙂#2021-12-1014:15Daniel SlutskyThis post suggests some thinking around our community practices, where some common goals could potentially enjoy new community structures.
https://clojureverse.org/t/rethinking-community-scope/
It is shared here under #announcements since it is probably the beginning of a new project.
Thoughts and comments would help a lot. 🙏#2021-12-1015:32Alex Miller (Clojure team)org.clojure/tools.logging 1.2.1 is now available
• tools.logging doesn't actually have a dependency on log4j (you bring your own), but it does use log4j as a test dependency and this bumps all those deps to the new versions#2021-12-1017:19Alex Miller (Clojure team)https://github.com/clojure/tools.namespace 1.2.0 is now available
• Fix https://clojure.atlassian.net/browse/TNS-51: Support namespaces as strings in require statements for CLJS (thanks @borkdude!)
• Fix https://clojure.atlassian.net/browse/TNS-57: Support :require-macros for CLJS namespaces (thanks @borkdude!)#2021-12-1019:53borkdudeNot a lot of people seem to be aware of this yet, but we also have a #releases channel for minor library updates. Feel free to join if you're interested in receiving those. (cc @seancorfield - perhaps we should mention that channel in the topic of this one?)#2021-12-1020:02quollThanks for this! I often have minor bug fixes that get released, but I don’t think it’s worthy of a post to #announcements. Now I know where to announce them#2021-12-1020:14seancorfieldWe're pretty much at the limit of the topic length already and it's already truncated for smaller screens at Do not cross po...#2021-12-1020:14borkdudetrue#2021-12-1020:15Lukas Domagalamaybe a pinned post then?#2021-12-1020:15borkdudedone#2021-12-1020:18mynomotoThere is description and topic and some of they are redundant atm.#2021-12-1020:20seancorfield@U05094X3J In our experience as Admins, very few people seem to read the description, unfortunately (and a lot of people don't even read the topic!).#2021-12-1020:24mynomotoYeah, that makes sense.#2021-12-1020:39pezGenerally I think we shouldn’t hesitate too much about updating in this channel, #releases is fine and all, but anyway, if there is an update to stuff people use, it is often worth an announcement, imo.#2021-12-1020:41borkdudeBefore we had the "rule" that one shouldn't post too many updates in a row about the same project and that you should wait until the history didn't show the previous announcement anymore. But now we have all history, so I guess that rule has to be slightly changed. The window was a few weeks. Personally I try to stick to 1 update per month about the same project.#2021-12-1020:44pezI always thought that “rule” was shite, tbh.#2021-12-1020:45borkdudeThis rule came into existence because one person complained about too many updates.#2021-12-1020:45borkdudeBut I guess rules can change over time. Perhaps it's good to call them guidelines#2021-12-1020:47mynomotoI like the one per month rule. We are big enough that if people start announcing every update it stops being useful.#2021-12-1020:50pezI'm more like that it is wonderful and beautiful with updates. And that it is more about the update content than the time between them. #2021-12-1020:52seancorfield@U0ETXRFEW We had some very vocal complaints about "Hey, that library has posted five updates in the last month! It's too noisy!" -- hence #releases#2021-12-1020:53seancorfieldSo, yeah, about "once a month" for #announcements unless it's an important, major release (such as a critical security fix, for example).#2021-12-1020:55seancorfieldI think if you have dedicated channels for your projects, it's fine to have every release mentioned in there. Heck, even wire up github to "announce" every commit/PR/whatever in your own project's channel 🙂#2021-12-1021:09pezI remember those complaints. One person. And I totally was thinking the opposite. "Five updates this month! Wow, that is awesome!”#2021-12-1106:54vemvA problem is that for every person having an opinion at all (in either direction) there will be 10, or even 100 which opinions we'll never possibly know of :)
Maybe they don't even have a formed opinion, so perhaps one can default to a pessimistic interpretation.
As someone who helps out with the maintenance of multiple high-impact clj projects, I can say that user feedback can be hard to gather, so treating attention as a scarce resource most likely helps.
(If it doesn't help you, please reflect on the necessities of other projects, and whether a stronger, more diverse community does in fact come out as a result of having a middle ground in place)#2021-12-1107:03seancorfieldRight, which is why we have the "rules" and why #releases exists (and why we're strict about threads in #announcements). Many people do find the "noise" annoying enough to tune out and then the value of those project announcements is just wasted. Information overload is a real problem. As an Admin, I try to stay neutral and will do what I can, with the other Admins, to satisfy the squeakiest wheels without reducing value for others, where we can. As a regular user of Slack, I have #releases muted and check it occasionally but I read everything in #announcements so I want it to have a very high signal-to-noise ratio and seeing repeated announcements from prolific projects is very annoying, even from projects that I use every day (and especially from projects I have zero interest in).#2021-12-1210:45bozhidarnREPL 0.9 is out and it finally brings the long-requested Unix file socket support (and a ton of other small improvements)! Check out the release notes (https://github.com/nrepl/nrepl/releases/tag/0.9.0) and the release blog post (https://metaredux.com/posts/2021/12/12/nrepl-0-9.html) for more details. Enjoy!
P.S. CIDER 1.2 is right around the corner. 🙂#2021-12-1210:47borkdudeWhat I am missing in the blog post is why you would use unix domain sockets for nREPL#2021-12-1210:49borkdudeThe issue number in the changelogs associated with this point to a different issue about keyword completions#2021-12-1211:07pezIf we use 0.9 from Calva, will we need to make some other changes or will it use regular TCP sockets?#2021-12-1211:53eval2020@U04V15CAJ I was also looking for this - it’s https://github.com/nrepl/nrepl/pull/204#2021-12-1211:55borkdudeThanks#2021-12-1215:22bozhidarNo one needs to change anything regarding Unix sockets, that's just another option for the people who need it. I mentioned briefly in the blog post that Unix sockets are a bit faster and definitely more secure for local development, which was the reason why we've added support for them. You don't want someone to connect to an unsecured REPL server running on your computer (if you accidentally bound it to a public address).#2021-12-1215:23bozhidar@U0ETXRFEW By default nothing changes, you have to start the server in a different manner for it to use Unix sockets (and clients need to be updated to support them). E.g. instead of a host/port you should just ask for the socket file and setup the connection accordingly.#2021-12-1215:24borkdude@U051BLM8F How do unix sockets make the "port file thing" simpler, as alluded to in the issue/PR?#2021-12-1215:25borkdudeThere is no port file since the unix domain socket file is the file?#2021-12-1215:25borkdudeAnd how does that interplay with jack-in stuff?#2021-12-1215:28bozhidarJack-in knows the filename directly, which makes it trivial to connect to the right socket. With the random port we had to wait until it's known, so that's a small win.#2021-12-1215:29bozhidarRight now jack-in doesn't support Unix sockets, only cider-connect does. (but the necessary changes for jack-in are pretty small)#2021-12-1215:31borkdudehow does cider-connect know what to connect to?#2021-12-1215:42bozhidarYou can connect CIDER by using the local-unix-domain-socket special hostname with cider-connect: M-x cider-connect RET local-unix-domain-socket RET nrepl.sock RET#2021-12-1215:43bozhidarBasically right now you have to pass the socket explicitly.#2021-12-1215:43borkdudeok#2021-12-1215:43bozhidarLater versions might pick up on .sock extension and just offer to connect the socket in the current folder or something along those lines.#2021-12-1215:44bozhidarBtw, thanks for all the feedback! I've fixed the broken link and I added more info about the benefits of using Unix sockets.#2021-12-1212:17borkdudeSCI, a Clojure interpreter suitable for DSLs and scripting, v0.2.8
Full changelogs:
https://github.com/babashka/sci/blob/master/CHANGELOG.md#v028
org.babashka/sci {:mvn/version "0.2.8"}#2021-12-1215:24Alex Miller (Clojure team)https://github.com/clojure/tools.build v0.7.0 16eddbf is now available
• write-pom - TBUILD-23 - specify explicit output path with :target
• Update to tools.namespace 1.2.0
• Update to tools.deps.alpha 0.12.1090#2021-12-1219:25Eric ScottJust released version 0.1.4 of https://github.com/ont-app/vocabulary.
- contains utilities to map between namespaced Clojure keywords and RDF-style URIs.
- has support for #lstr "language reader macro.
Thanks to Mathieu Lirzin (https://github.com/mthl) for his
contribution making the dependencies of this project much
lighter-weight.#2021-12-1304:19johnI'm pleased to announce the first general release of a beta for injest - a library for combining transducers with the semantics of thread-last forms. injest lowers the bar to high performance in Clojure and ClojureScript.
The initially available features are:
• Path Threads: Navigate into data like you would with keywords, but with strings, numbers and functions
• Auto Transducification: Automatically turn sequence functions in a thread-last into transducers, comping together contiguous ones
• Auto Parallelization: (only in CLJ, not CLJS) In addition to the above, comp parallel transducers into their own function, run on r/fold's fork/join pool
• Extension: Add non-core transducers to the injest with reg-xf! and reg-pxf!, for single threaded and parallel transducers, respectively
• Profiling: Require in from injest.report.path and get a report showing you a performance comparison of all the macro variants at a given line and column for each call-site at runtime (only in CLJ, not CLJS yet)
Thanks to everyone who gave feedback on the road to getting this to beta.
https://github.com/johnmn3/injest
A short video introduction is available as part of the re:Clojure Data Science Special: https://www.youtube.com/watch?v=GNncKCKHEI4 workshop.#2021-12-1312:42ericdalloReally interesting lib!#2021-12-1312:43ericdalloBTW, Thanks for the clj-kondo/LSP section on readme :)#2021-12-1316:05johnThanks! And thank you for your work on LSP. At some point I'll be hoping to polish that bit up some more and I'd love to rap with you about how LSP works.#2021-12-1316:08ericdalloThank you!
Cool, the good news is that next release that whole clj-kondo section would't be necessary anymore :)
As @U04V15CAJ implemented auto load configs 🚀#2021-12-1415:08KelvinCool library John! The x>> and =>> macros in particular could be very useful for micro-optimizing codebases with lots of transducer pipelines.#2021-12-1422:23john@U02FU7RMG8M Thanks!#2021-12-1404:58seancorfieldThanks to the prompting of @viebel https://clojure-doc.github.io/ now has Klipse integration and the "Introduction to Clojure" and "Laziness in Clojure" pages now have interactive examples that you can experiment with, in the browser! Contributors are very welcome, please! Follow-up in #clojure-doc#2021-12-1406:44robert-stuttafordNikita @tonsky (of Fira Code and Rum fame) has released a new Sublime Text experience for Clojure.
https://tonsky.me/blog/sublime-clojure/
https://github.com/tonsky/sublime-clojure#2021-12-1409:47mkvlrit’s really well done 👏. Sublime 4 is so refreshingly fast that I’m almost reconsidering my current relationship.#2021-12-1409:59henrikSublime has been my go-to text editor of choice since at least 1.0, simply because of its speed. It starts faster than the built-in Notes app on my mac.#2021-12-1415:18athomasoriginalI use vim now, but if I was teaching code (clojure) to someone, I now think I would throw sublime back in the miix#2021-12-1416:18pezLooks super sweet! I love that he makes the case for #nrepl. It is such a wonderful piece of software!#2021-12-1416:33robert-stuttafordso many great options now. it's very different to when I started with slime and swank in '12. what a great community 🙂#2021-12-1416:38flowthing👍:skin-tone-2: For sublimetext ! FWIW, I responded to some of the points regarding Tutkain over at Reddit (https://www.reddit.com/r/Clojure/comments/rflhxf/comment/hoi250s/).#2021-12-1419:29Niki@https://app.slack.com/team/U4ZDX466T thank you for writing this up! What are to-go REPL choices for CLJS today? I’m afraid I’ve been out of touch for too long and they change it again?#2021-12-1506:51flowthing@tonsky I think shadow-cljs is the most popular choice, then Figwheel. Figwheel's nREPL integration is powered by Piggieback, I believe, and shadow-cljs has its own thing.
Back when Tutkain targeted nREPL, I tried setting up a ClojureScript REPL using the simplest possible Piggieback configuration and failed to come up with a usable setup. In any case, with Piggieback, you must always first connect to a Clojure REPL before you can turn it into a ClojureScript REPL, which I don't want to do. There are times when I just want to connect to a ClojureScript REPL.
I also feel like Piggieback does not offer a particularly beginner-friendly experience, generally speaking.
What I'd really like to have is a ClojureScript REPL experience that is as close as possible to the kind of the Clojure REPL experience Tutkain and Sublime Clojure have: tell your editor to connect to a socket port and voilà, you're off to the races. (Of course, with ClojureScript, you also have to spin up a JavaScript runtime and so on, but still).
Tutkain actually has that, but it only supports shadow-cljs, sadly. I would really, really like to have a ClojureScript REPL thing that's build tool agnostic, but it is sadly not possible. ClojureScript itself does not have support for an editor-connected socket REPL, and even if it did, simply having shadow-cljs in the classpath would prevent you from using it.
All in all, if I were to begin building an editor-connected, build tool agnostic ClojureScript REPL on top of nREPL (with support for symbol info lookups, auto-completion and other runtime querying), I'm not sure where I'd begin. With shadow-cljs, using shadow.remote would be your best bet, but it is obviously shadow-cljs specific. You might be able to build some sort of abstraction that wires up shadow.remote for shadow-cljs and does something else for Figwheel etc., but that'd be quite a bit of work, I think.#2021-12-1506:55flowthingAll that said, I know plenty of folks use nREPL-based ClojureScript REPLs successfully every day, so maybe this is just me being somewhat particular about the whole thing. I guess to me it all just feels way too complicated. 🙂#2021-12-1508:44henrikFrom a UX point of view, I don't really care about connecting to a CLJS REPL directly either. I want to "connect to my project", and somehow have that magically mean that I'm connected both to CLJ and CLJS as necessary, and have things eval in the correct place depending on which file I'm in. This is not trivial, of course, and .cljc makes that ambiguous as well. If I remember correctly, both Proto-REPL and Chlorine handle this pretty well.
Our current setup is to start the Shadow server with Integrant, which exposes a socket REPL and an NREPL (so that either can be used, based on editor/preference), then use shadow/repl <build-target> to get to CLJS. Using Shadow gives us access to build control via the REPL, as well as provide a nice dashboard and tap target on port 9630, etc.#2021-12-1509:00flowthing> From a UX point of view, I don't really care about connecting to a CLJS REPL directly either. I want to "connect to my project", and somehow have that magically mean that I'm connected both to CLJ and CLJS as necessary
I do care about connecting to a CLJS REPL. There are ClojureScript-only projects, too. And I definitely want no magic. 🙂
I'm with you on the editor having to know whether to evaluate Clojure or ClojureScript, though (which Tutkain does as well: https://tutkain.flowthing.me/dialect.mov).#2021-12-1509:23henrikIf it's a CLJS-only project, then it's obvious that you want to connect to CLJS. I think the point stands. It's not magic (poor word choice), it's just about how closely you can model the intention of the person using the tool.#2021-12-1509:37henrikYou know, "magic", in the sense that things that are frictionless in places where friction usually is encountered can feel like magic. (Until you get acclimated, and then the previous friction spurs anger when it's encountered again. Clojure itself is an example of this with regards to certain aspects)#2021-12-1509:54flowthingRight, I think I understand. Something like that might make sense if it could be neatly composed of existing functionality. But to me, connecting to a Clojure(Script) runtime with Tutkain (or something like Chlorine, I think, although I've only tried it briefly) already has so little friction that I don't see it as a huge priority. Anyway, although I feel like saying more, I'm slightly worried we'd be veering a bit too far off topic. 🙂#2021-12-1419:36Cora (she/her)logback has a new release (1.2.8) that addresses a harder to exploit, yet critical, vulnerability. they're urging users of logback to upgrade asap http://mailman.qos.ch/pipermail/announce/2021/000164.html#2021-12-1419:43Ben SlessThanks for the heads up 👍#2021-12-1419:55vlaaadThanks, although judging by the post the issue is a bit overblown. When attacker has write access to the code (this is where config files are), the system is already compromised enough for this vulnerability to matter IMO#2021-12-1420:03Cora (she/her)something like this allows an attacker to easily establish a remote shell while not disrupting the running services otherwise. it's not overblown, it's just not as trivial to attack as the log4j vulnerability. a lot of hacking is moving horizontally, combining multiple stages of vulnerabilities to establish persistent access. the fewest changes an attacker can make to establish a permanent foothold, the better (for them).#2021-12-1420:05Cora (she/her)and writable configuration files don't necessarily mean writable application files, especially if the vulnerability you're using to rewrite files can only rewrite plaintext#2021-12-1421:21dharriganI tend to concur with Vlad here, the authors in their post of the vunerability have not deemed it as a critical vunerability. It takes an existing compromised system to exploit this one, and whilst there is merit in getting in via the "back door", if you have that level of access to a system running with logback and a writeable file, then you have bigger worries than the one here. Naturally, practicing caution is good and ensuring you update to the latest library is a given, but it doesn't have the same criticality as the log4j exploit.#2021-12-1421:23Cora (she/her)I never said it has the same criticality of the log4j exploit, I even said it was harder to exploit#2021-12-1421:29Cora (she/her)they're urging everyone to update as soon as possible and have ripped out functionality wholesale because it's so dangerous. I guarantee you people taking the OSCP in years to come will be checking for this vulnerability as a relatively easy way to get a reverse shell. it's a big deal. so 1) they want everyone to update as soon as possible, and 2) it's a really big deal. I call it critical and I'm out of line? come on#2021-12-1421:44dharriganThe news item on the logback home page , even says that this exploit and the log4j exploit are "....uttterly different severity levels".#2021-12-1421:49Cora (she/her)yes, I said it was harder to exploit#2021-12-1421:49Cora (she/her)it requires you chain vulnerabilities#2021-12-1421:50Cora (she/her)it still gives you a remote shell and was deemed dangerous enough to rip out wholesale, by the software authors you're pointing to for judgement on how critical the bug is#2021-12-1421:51dharriganRight, totally agree, but in terms of announcing to the community that this is a "critical" update, when no such mention of the word is used, and that it requires chaining of exploits, is I feel unduely panicy.#2021-12-1421:51Cora (she/her)the software authors are urging everyone to update as soon as possible...#2021-12-1421:52dharriganI agree there, like any good author of software that has a security vunderability, that is totally due diligience.#2021-12-1421:52Cora (she/her)like even by the authority you're pointing to it's something to handle as soon as you can#2021-12-1421:52dharriganBut they would say the same if it even had a minor vunerability, or major, or omg, the world is about to explode if you even run this software.#2021-12-1421:53Cora (she/her)look: this argument is really boring and I'm grouchy. if you want to make another post with whatever language you want to use then go right ahead#2021-12-1421:53dharriganNaw, I'm tired too.#2021-12-1421:53Cora (she/her)¯\(ツ)/¯#2021-12-1421:53Cora (she/her)your comments are here for the record, people can see there's a big thread#2021-12-1421:53Cora (she/her)it's all fine#2021-12-1421:54dharriganyup 🙂#2021-12-1420:49chaosA tiny library hack to load bhauman/devcards with only the essential npm packages required, v0.1.0 https://github.com/ikappaki/devcards-loader#2021-12-1516:02henryw374nice! in case you didn't know, you could add highlight and marked to a deps.cljs file so they get installed automatically#2021-12-1519:03chaosThanks! I only thought about it in passing, will have a closer look at the details with the next opportunity, feel free to raise a PR in the meantime 🙂#2021-12-1504:08seancorfieldGiven the importance of this: https://logging.apache.org/log4j/2.x/security.html -- TL;DR: the JVM option was not sufficient to disable all lookup paths so installs with log4j2 2.10.0 - 2.14.1 with that option are still vulnerable. 2.16.0 is available now with the entire lookup machinery removed to prevent a potential DDoS possible through 2.15.0(!). Discussion in a thread please. Guess we'll be updating all our libraries again tomorrow!#2021-12-1514:47henryw374thanks! I released another version of https://github.com/henryw374/clojure.log4j2#2021-12-1515:11Michael WIf you can't upgrade you can strip JndiLookup.class from the jars, we have done that for several older systems with slow vendors at work and it appears to work great.#2021-12-1522:21Eugen@UAB2NMK25 - nice and simple solution for some situations#2021-12-1523:53Cora (she/her)it looks like log4j 2.15.0 has a more serious vulnerability than just a denial of service, making an upgrade even more important https://www.praetorian.com/blog/log4j-2-15-0-stills-allows-for-exfiltration-of-sensitive-data/#2021-12-1600:07seancorfieldThat's why I posted the link to the log4j security page here last night and described this in the TL;DR note attached to it.#2021-12-1600:08seancorfield(CVE-45046 which Praetorian also mention)#2021-12-1600:09seancorfieldInterestingly, I thought when I posted that link last night that the log4j security page explicitly said that 2.15.0 did not fix all lookup paths but now that I read it this afternoon, I can't see that mentioned.#2021-12-1600:11seancorfieldOh, here it is, way further down the page than I thought! "The reason these measures are insufficient is that, in addition to the Thread Context attack vector mentioned above, there are still code paths in Log4j where message lookups could occur: known examples are applications that use Logger.printf("%s", userInput), or applications that use a custom message factory, where the resulting messages do not implement StringBuilderFormattable. There may be other attack vectors." ( my emphasis )#2021-12-1600:12seancorfieldThis has been such a mess... I feel like I've been working on this issue in one form or another continuously since Thursday evening 😞#2021-12-1600:13seancorfieldToday, our datacenter sent us a notification that "log4j2 2.14.1" has been detected on your servers. It was still in the local Maven cache, even though both 2.15.0 and 2.16.0 were there as well (and everything on those servers is using 2.16.0 only at this point!).#2021-12-1600:15seancorfieldWe're still waiting on Elastic Cloud to follow up (they already notified customers to restart their clusters to pick up the JVM option -- which we've since all learned is not sufficient).#2021-12-1600:23Lukas Domagalaugh your situation sounds really exhausting, hope you guys get some well-earned rest after this week:+1:💪#2021-12-1600:33Cora (she/her)this vulnerability goes beyond the one in the CVE, though?#2021-12-1600:33Cora (she/her)in the link I posted#2021-12-1600:33Cora (she/her)that sounds really frustrating #2021-12-1600:33Cora (she/her)an entire week of work oh this#2021-12-1600:38seancorfieldThe log4j security page also goes beyond that CVE -- but it's a bit buried in the page. But the fact that 2.15.0 doesn't prevent all lookups was mainly why I posted that last night. The DDoS vuln was just icing on that particular cake.#2021-12-1600:41seancorfieldIt's good to have that Praetorian article posted too -- I suspect a lot of folks haven't read the log4j security page in detail (and, worse, it keeps getting updated so you have to keep going back and re-reading it over and over again!).#2021-12-1600:43seancorfieldIn another tech Slack, I've been arguing with people who continued to claim the JVM option was all you needed 😞#2021-12-1600:46seancorfieldAt this point, I'm sort of expecting 2.17.0 to appear with an explanation of why 2.16.0 doesn't solve everything either 🙂 (but, given 2.16.0 has removed the lookup machinery completely, I hope that's just me being cynical at this point!)...#2021-12-1600:47Cora (she/her)all eyes are on java logging libraries for vulnerabilities now so it may even be something else entirely #2021-12-1601:56quollAt this point I’m just grateful that my company doesn't use Kronos for payroll #2021-12-1606:25orestisBoth cloudflare and AWS have come up with firewall rules to drop log4j related attempts. I still see a few weird attempts reaching out nginx logs but otherwise it does a decent job. We still of course updated to 2.16.0#2021-12-1607:42seancorfieldGiven that requests can be broken down to ${${..}..} and not include the jndi string, I'm not sure how they're blocking it -- especially since it can occur in the body, the URL, or any header. But I guess if they're blocking the most obvious attempts that at least lessens the load on your app...#2021-12-1612:23rickmoynihanYeah this log4j2 thing is a real pain due to its extent. Auditing has taken up a lot of our time this week.
I’m hoping this will settle down now; but I’m also quietly hoping we’ll see log4j2 cut back and release a cut down version — moving any fancy/risky networking things into optional extras, and getting them off the classpath altogether.
I don’t want to throw the baby out with the bathwater; but I’m also wondering if people have any recommendations for a more minimal java based logging framework that works with clojure.tools.logging.
I’m not looking at jumping ship just yet; but I’ve since discovered tinylog, which might fit the bill.#2021-12-1612:23rickmoynihanhttps://tinylog.org/v2/#2021-12-1612:25rickmoynihanThough I’d certainly appreciate any competing framework like this to have had a pretty thorough audit. At least with log4j2 we have many eyes right now.#2021-12-1822:20dakraThird High Severity CVE in Log4j Is Published https://logging.apache.org/log4j/2.x/security.html
and HN discussion https://news.ycombinator.com/item?id=29604097#2021-12-2008:54rickmoynihanYeah I spotted that over the weekend too; this one seems less likely to be that big a deal for most folk though.
Obviously YMMV#2021-12-1600:12tony.kayI'd like to announce the availability of a new CLJC statecharts library (similar to clj-statecharts). I would have loved to have contributed to the expansion of the existing one, but for various reasons it was not going to meet my needs.
This version supports history (deep and shallow), has protocols for defining all of the significant subsystems from the code execution model (e.g. you could use CLJC functions, SCI interpretation, or even Javascript eval), the state-local data model (e.g. could use a durable database), event queue, and even the algorithm semantics. It is structured so that it can support the invoke concept from SCXML to run/cancel external processes in an abstract way while being able to pass events between the running statechart and that external statechart/service (that still needs further refinement).
The built-in processor follows the SCXML (minus the XML requirement 😄) standard (in structure and semantics as far as they are defined in https://www.w3.org/TR/2015/REC-scxml-20150901/), and is intended to be structured for use in a distributed and durable environment (e.g. able to save/load a session, use a durable event queue, etc.)
All that said, it does come with predefined and simple elements for all of those components, so it is easy to get started with, especially if you just wanted it for short-term in-memory programming.
I will be using it in a distributed durable environment in production in short order, so the API is pretty stable, and any bugs will get worked out quickly.
https://github.com/fulcrologic/statecharts#2021-12-1611:25martinklepsch@U0CKQ19AQ that’s awesome to see! Do you have any plans on a visualizer for this? I’ve been using XState in a CLJS codebase with good success and mostly picked it over clj-statecharts due to the visualizer feature which I just find very useful and well executed. The other day I even visualized a running statechart inside a node process, which was easier than expected.#2021-12-1616:37tony.kayI saw that as well and would love it, but it is very very low on my priority list. I think a JSON <-> Xstate converter would be easier, and then you could just use their tools 😄#2021-12-1616:41tony.kayI'm much more interested in some full stack things, like running charts over a long time (persisted in a database) and having charts that can cross-communicate full-stack, etc. Being able to version and persist the chart definitions themselves is also interesting to me as a software evolution path, which is why I abstracted away the execution model, so you are not stuck with embedded code on a machine def that becomes non-portable. Imagine a machine that can move from VM to VM (e.g. JVM <-> browser <-> node, etc). All sorts of possibilities, but mine are mainly focused around building stuff that has a distributed, cross-communication, long-lived aspect to it (payment/subscription system for a business is where I'm using it first).#2021-12-1616:42tony.kayBut I also see some really cool ways to build complete Fulcro apps with it, where the abstracted data model and cross-env messaging could integrate very well with FUlcro's full-stack story.#2021-12-2004:41Lucy WangGlad to see another statecharts library! During the last two years I find statecharts more and more convenient in all kinds of frontend & backend projects!#2021-12-1610:20Shantanu KumarCambium has a new release including Logback security-fix w.r.t. LOGBACK-1591: https://cambium-clojure.github.io/#2021-12-1612:24Lukas Domagalathat looks nice! is it ok if I ask what the conceptual difference would be between this and using mulog with an slf4j adapter?#2021-12-1613:03Shantanu Kumar@U02EMBDU2JU AFAIK (in my very limited reading) mulog is mainly for observability and metrics whereas Cambium is for SLF4j based data-oriented logging. Cambium has also been used to log metrics to ELK stacks though. As per https://github.com/BrunoBonacci/mulog/issues/25 there doesn't appear to be a mulog SLF4j adapter. For more discussion please feel free to ping in the #cambium channel.#2021-12-1618:07HuahaiReleased symspell-clj 0.2.4, a spell checker library for Clojure. It is based on a Java port of SymSpell spell checker, a fast spell checker using pre-calculated typos. https://github.com/juji-io/symspell-clj#2021-12-1621:43mkvlrEarlier this week we released Clerk io.github.nextjournal/clerk {:mvn/version "0.4.305"}, the biggest update since it’s initial release. 🔗https://github.com/nextjournal/clerk. Highlights include:
• Ⓜ️⬇️ Markdown support for prose-heavy docs
• 👁️ New viewer api with and open transform & fetching behavior to allow fetching anything from the JVM, see https://github.com/nextjournal/clerk/blob/5e05a77b2bc2e8b39c2f41812611b2a0cca9bd32/notebooks/viewers/image.clj
• 🪄 clerk-eval to call back into the JVM from viewers, see https://github.com/nextjournal/clerk/blob/5e05a77b2bc2e8b39c2f41812611b2a0cca9bd32/notebooks/dice.clj
• 🙈 controlling code cell visibility, see https://github.com/nextjournal/clerk/blob/5e05a77b2bc2e8b39c2f41812611b2a0cca9bd32/notebooks/visibility.clj
📺 Also, my https://twitter.com/mkvlr/status/1471187433119268872 was released yesterday. Along with it, we’ve created a repo of https://twitter.com/mkvlr/status/1471188802064596992 I recommend checking out. Spreading the word is very much appreciated. 🙌 🙏#2021-12-1706:17robert-stuttafordJust a sense-check - we could use clerk to compose in emacs, check source into git, and then have clerk render pages within our own Ring server, inside our own platform, right? As an internal documentation system?#2021-12-1711:01mkvlrchecking into git very much. Regarding the rendering, do you even need a server? https://nextjournal.github.io/clerk-demo/ is just served from a github page but you can serve it from anything, also a S3 or Google Cloud Bucket. Or even have a single html file with everything in it like on https://snapshots.nextjournal.com/clerk-demo/build/57f4eaf93c604ea0fe6697c27d509becaff1a038/index.html#2021-12-1711:17robert-stuttafordthanks @U5H74UNSF - mainly it's about access control. could we put it in our app where we have all that figured out already? it's looking like 'yes'! 🙂#2021-12-1711:18robert-stuttafordclerk + ns = live repl env -> output html with js = 'reader'. the output has a way to update when the live repl env tells it to. right?#2021-12-1711:18robert-stuttafordthis is insanely cool btw#2021-12-1711:19robert-stuttafordlike my brain is struggling to grasp just how game-changing this is#2021-12-1711:19robert-stuttafordgood thing i've got 3 weeks of downtime to play in 😅#2021-12-1711:21mkvlryep, also works in both directions#2021-12-1711:23mkvlrso if you’d like to serve it inside your app you could: have a set of notebooks that you turn into edn files, via https://github.com/nextjournal/clerk/blob/5e05a77b2bc2e8b39c2f41812611b2a0cca9bd32/src/nextjournal/clerk.clj#L328#2021-12-1711:23robert-stuttafordtheoretically also possible to emit the html directly rather than dumping on disk and then serving that disk file via e.g. io/resource right#2021-12-1711:24robert-stuttafordright!#2021-12-1711:25mkvlryes, see https://github.com/nextjournal/clerk/blob/main/src/nextjournal/clerk/view.clj#L166#2021-12-1711:25mkvlror you’d want the static-app case, without a websocket, so https://github.com/nextjournal/clerk/blob/main/src/nextjournal/clerk/view.clj#L187#2021-12-1711:26robert-stuttafordbril, that gives me what i need. thanks Martin!#2021-12-1711:27mkvlrgreat. Also have some ideas around supporting the code browser / living docs use case better#2021-12-1711:28robert-stuttafordplugging this in behind our access control and into our datomic database (which is has data going back to 2013) is going to be so fun#2021-12-1711:29robert-stuttafordlive 'ADRs', data migration analysis, so much potential#2021-12-1711:29robert-stuttafordi'll be sure to take notes about any frictions i encounter!#2021-12-1712:12mkvlrhttps://twitter.com/jackrusher/status/1471813316871872529?s=21#2021-12-1714:05robert-stuttafordwell yes please!#2021-12-1704:30djblueJust released https://github.com/djblue/portal/releases/tag/0.19.0, a data inspection / visualization tool. It now includes the ability for users to define their own reagent views via SCI ClojureScript. Docs and examples are in the works but initial apis can be found https://cljdoc.org/d/djblue/portal/0.19.0/api/portal.ui. This is an initial release so still a little experimental, but should be good enough to start playing with. Feedback welcome!#2021-12-1704:33djblueFor those looking for an intro to portal, check out https://www.youtube.com/watch?v=Tj-iyDo3bq0!#2021-12-1819:06practicalli-johnhttps://github.com/practicalli/clojure-deps-edn is a collection of community tools as a user level configuration for Clojure CLI tools.
• updated all aliases to use the latest library versions (using antq)
• added security/nvd alias to check library dependencies against the National Vulnerability Database
• added :test/watch to run Kaocha test runner in watch mode for any project, a quick way to get fast feedback - clojure -M:test/watch#2021-12-1908:45vemvVery nice!
I'd recommend documenting the nvd usage such that https://github.com/rm-hull/nvd-clojure#avoiding-classpath-interference is honored
In particular, the classpath the nvd program itself will be running should never be affected by a given project's dependencies.
This can be as easy as cd ~ before running the program.
Next point, the analyzed classpath's should be received as an argument out of a clojure -Spath invocation, please don't let it be inferred (that API will soon be deprecated)#2021-12-1918:10practicalli-johnI've updated the command to run the :security/nvd alias to include the two arguments.
As :security/nvd is a user wide alias, then clojure-nvd is not included in the project path, which is what the documentation seems to warn against.
However, the clojure-nvd jar is merged into the classpath when used as an alias no matter where the clojure command is run, so it would still be there.
Perhaps this is a candidate for being a tool and dropping this alias (or marking the alias with a warning)
This would make a good example of why the -Ttool approach is useful.#2021-12-1918:51vemvThanks! Looking reasonable
> However, the clojure-nvd jar is merged into the classpath when used as an alias no matter where the clojure command is run, so it would still be there.
One should be careful both ways: a given project's dependencies can affect nvd-clojure's own dependency tree. So cd ~ does buy one extra isolation for that one case as well.
-Ttool is a bit better which is why we added it to nvd-clojure. Still, I was disappointed that Tools adds . to the classpath, so cd ~ still buys a little bit of correctness.
For a security-oriented tool I'm generally favoring correctness over convenience/minimalism.#2021-12-2012:35ericdalloclojure-lsp Released https://clojure-lsp.io/ 2021.12.20-00.36.56 with new features, fixes and performance improvements!
The main focus of this release was fixing some bugs and improving lint performance, besides that we had a great feature addition with a new custom LSP feature, the Test Tree, which ATM show details about the test hierarchy of the current file, check the screenshot!
We also added support for babashka pods babashka! Soon, this should be available on babashka pod registry and then you will be able to run clojure-lsp directly from babashka scripts/tasks!
We also bumped to latest clj-kondo release clj-kondo, which was a major release with a lot of new things! Check it out the major release https://clojurians.slack.com/archives/C015AL9QYH1/p1639690696080500.
This release was supported by Clojurists Together 💜 clojurists-together
Check #lsp channel for more information#2021-12-2119:02Kelvinhttps://github.com/yetanalytics/colossal-squuid v0.1.3 v0.1.2 has been released with one major change - it is now deployed on Clojars. No more fiddling with Git SHAs.
(UPDATE: we pushed v0.1.3 up since we found that a fatal bug was introduced in v0.1.2.)#2021-12-2119:03KelvinI want to thank @U04V70XH6 for making this update possible with his build-clj library. Not only does it make it easy to build and deploy JARs, but it works well with GitHub Workflows in order to automate the deploy process.#2021-12-2214:29bozhidarCIDER 1.2 ("Nice") is out https://metaredux.com/posts/2021/12/22/cider-1-2-nice.html Cheers! cider#2021-12-2220:06borkdude#nbb v0.1.0
Ad-hoc CLJS scripting on Node.js using SCI. nbb
See changelogs in #releases https://clojurians.slack.com/archives/C015AL9QYH1/p1640203769096100#2021-12-2309:20Ben Slesshttps://github.com/bsless/more.async release v0.0.8 with new features!
more.async is a library containing some bits I often found I miss when programming with core.async, especially around pipelines and dealing with time.
• declarative data language for building data flow systems
• circuit breaker and rate limiter pipes
• Other less exiting bits and bobs#2021-12-2314:11vemvhttps://github.com/rm-hull/nvd-clojure - 2.0.0 - security checker
nvd-clojure checks your dependency tree and reports known-vulnerable dependencies such as specific log4j and logback versions.
In 2.0.0, we're removing old APIs that commonly lead to inaccurate usage. Correct usage is now best summarized in its updated README and includes @seancorfield's excellent addition of a clojure -Ttools tool.
Misc other improvements reflected in the https://github.com/rm-hull/nvd-clojure/blob/2.0.0/CHANGELOG.md#changes-from-190-to-200.#2021-12-2318:07robert-stuttafordfwiw #web-security#2021-12-2321:46seancorfieldhttps://github.com/seancorfield/honeysql v2.2.840 -- Turn Clojure data structures into SQL
• Fix #375 for :nest statement.
• Fix #374 by removing aliasing of :is / :is-not -- this changes the behavior of [:is-not :col true/false] to be correct and include . Using :is / :is-not with values that are not Boolean and not nil will produce invalid SQL.
• Update test dependencies.
• Update build-clj to v0.6.5.
Follow-up in #honeysql -- regarding #374 please see https://cljdoc.org/d/com.github.seancorfield/honeysql/2.2.840/doc/getting-started/sql-operator-reference for more details#2022-12-2719:33lilactownWhat is a hike, but a really long walk? ⛰️🚶:skin-tone-2:
I am pleased to announce a new library, https://github.com/lilactown/cascade. It provides a couple of helpful capabilities in two namespaces
1. cascade.core is a collection of continuation-passing, thunk-producing versions of many Clojure core functions. This provides the ability to write recursive algorithms that do not use the call stack in Clojure(Script) by combining familiar operations like reduce and into with trampoline.
2. cascade.hike is like `clojure.walk`, but defines `walk` in a way that supports walking very large, nested data structures without using the call stack. prewalk, postwalk et al. work just like their original counterparts but can traverse arbitrarily nested forms without overflowing the stack.
Documentation is https://cljdoc.org/d/town.lilac/cascade/1.1.0/doc/readme. Any questions, comments, or issues can be DMed to me or opened in a GitHub issue. Happy hiking!#2022-12-2719:41Ben SlessWhen you refactor so hard you make a library?#2022-12-2719:41lilactown😂 exactly that#2022-12-2719:42lilactownhad an itch I needed scratched and thought maybe other people would too!#2022-12-2719:44Ben SlessNicely done
I'm of a mind to extract the lazy streams idea from micro kanren and see how it interacts with this :thinking_face:#2022-12-2720:03lilactownsounds neat. not familiar with that#2022-12-2720:26Ben SlessIt's about interleaving execution or backtracking fairly. Very interesting#2022-12-2804:52Ben SlessAnother thing which I find interesting is how CPS identity is 1 in Church numerals and constantly is 0#2022-01-0409:12Jakub Holý (HolyJak)Hi! It would help me to understand when I might want to use Cascade if the README has some motivating examples. I do no think I run into the need that it satisifies. What kind of algorithms/problems that need you have you two encountered? 🙏#2022-01-0409:16Ivanfrom what I understand, it emulates recursion but it doesn't fill up the stack. ie, a classic problem is depth-first search on a tree (think of reimplementing ls -R for a filesystem) - the recursive solution is simple but in practice limited by the stack size, so if the depth exceeds some limit it crashes. With cascade you keep the simple nature of the solution but the limit is "magically" gone.#2022-01-0411:55Ben SlessSpecifically, Will came to this solution trying to prevent stack overflows in his other library, pyramid#2022-01-0417:29lilactown@U0522TWDA the cascade.walk namespace is what originally motivated me to write the rest of the library. it allows you to walk an arbitrarily nested Clojure data structure without worrying about failing with a StackOverflow exception#2022-01-0417:32lilactownlike Ben said, I wanted this ability in pyramid to normalize extremely large data structures. See it used here: https://github.com/lilactown/pyramid/blob/trampoline/src/pyramid/core.cljc#L120-L133#2022-01-0417:35lilactowna library that meets a similar need is clojure.zip. cascade is quite a bit faster than zippers IME, although I haven't figured out how to move up/down/left/right in all the ways zippers do yet#2022-01-0417:36lilactownthere's some other interesting properties that Ben referenced above, like the ability to pause/resume and interleave the calculation of algorithms that are written in the trampolined styled that cascade is#2022-01-0421:14Jakub Holý (HolyJak)Thanks a lot!#2022-12-2813:28simongrayhttps://github.com/simongray/datalinguist is a REPL-friendly Clojure wrapper for Stanford University’s CoreNLP
Datalinguist tries to make the https://stanfordnlp.github.io/CoreNLP/ more manageable by introducing a more data-oriented API. Several Clojure protocols are supported, e.g. Loom graph protocols and Datafy. This makes for a much smoother experience than the fairly cumbersome Java experience.
Currently, the full language annotation pipeline is available in the core datalinguist namespace, while certain post-annotation features such as dependency parsing, semgrex (regex for dependency parse graphs), and triple generation have received wrappers too in separate namespaces.
You can use the various annotators through their supported language models (downloaded as separate dependencies — see README) to extract valuable information from text. Have fun!#2022-12-2813:58simongrayI should probably qualify what I mean by data-oriented.
The native Java objects that are the outcome of the language annotation process are used directly as input for the various post-annotation functions since this allows for the most direct mapping to CoreNLP’s various methods, however almost all of them can be recursively datafied at any point should you wish. Furthermore, the config used to construct a language processing pipeline is just a regular Clojure map. The point is to maximise integration with both CoreNLP as well as a typical Clojure workflow.#2022-12-2820:25slimslenderslacksA clojure cli https://clojure.org/reference/deps_and_cli#_using_named_tools for packaging clojure apps into container images using https://github.com/GoogleContainerTools/jib (docker-less build/push) - https://github.com/vehvis/lein-jib-build already exists for leiningen. This supports jib builds in the deps.edn world, and comes with some opinions on how to layer jar dependencies in container images. https://github.com/atomisthq/jibbit#2022-12-2909:50orestisWoo I was looking at juxt pack just yesterday since it was the only thing that Google brought up for this. Glad to see this. Thanks!#2022-12-2915:40eskosI don’t have an env handy for testing this immediately so I’ll ask a dumb question instead - does this tool add dependencies as JARs in a separate layer instead of making an uberjar? Because if yes, that’s 💯🎉#2022-12-2916:22slimslenderslacks@U8SFC8HLP ya, that's exactly what it does. It uses the basis from deps.edn to copy all of the dependencies into one layer. Then it generates a Class-Path manifest entry in the application jar and copies that to its own layer.#2022-12-2916:53slimslenderslacks@U7PBP4UVA feel free to reach out if you have any issues. I've been using this to deploy a pretty broad set of clojure projects (mostly deploying to gcr and ecr so far) but my entrypoints are very boring (`java -jar app.jar` with a configurable namespace for the -main - I sort of anticipate that this might not be sufficient. Also happy to add some more authenticators for image pushes - I now know more than I'd like to about registry authentication so I'd like that to be useful somehow.#2022-12-2916:58orestisI'm still evaluating containers for production etc but in our case we're on AWS so ECR etc. #2022-12-2917:07slimslenderslacksCool, the author of lein-jib-build had already worked through most of the details for authenticating to ECR via environment variables, aws profiles, assume role, ... It's working well in practice.#2022-12-3010:35Ivar RefsdalNeat project!
I would recommend adding "-Dclojure.main.report=stderr" "-Dfile.encoding=UTF-8"
to the java command in order to have helpful error messages on exceptions (and not a file) and also setting the default encoding to UTF-8 (IIRC this will affect e.g. (slurp (io/resource "some-classpath-file"))).
I would also advise against using pure clojure.core/read-string as it can execute code, and instead use clojure.edn/read-string.#2022-12-3015:47slimslenderslacks@UGJE0MM0W thanks! Those do seem like better defaults - have added them now. Good catch on read-string too. Thanks again.#2022-01-0411:33eskosThose two have different semantics though, which is why https://github.com/clojure/tools.reader exists 🙂#2022-01-0511:57Ivar RefsdalWhat exactly are you trying to say @U8SFC8HLP?
> Presuming you're reading typical edn data [on the JVM], clojure.edn is the preferred option.
Rough quote from Alex Miller https://groups.google.com/g/clojure/c/d61ImK2VCag.#2022-12-2917:08borkdudebabashka.process Clojure wrapper for java.lang.ProcessBuilder v0.1.0
• Resolve binaries on Windows using `fs/which`
• String with backslash is tokenized incorrectly https://github.com/babashka/process/issues/47
• Support `deref` with timeout https://github.com/babashka/process/issues/50 (https://github.com/SevereOverfl0w)
• Fix piping with `$` macro https://github.com/babashka/process/issues/52
See the full changelogs https://github.com/babashka/process/blob/master/CHANGELOG.md#2022-12-2917:32borkdudebabashka v0.7.0-v0.7.3: fast starting native Clojure scripting environment.
Highlights:
• compatibility with clojure.spec.alpha. Also see https://blog.michielborkent.nl/using-clojure-spec-alpha-with-babashka.html
• Error message/output improvements
• arm64 docker images
• Load babashka tasks from other bb.edn file (--config and --deps-root options)
See the full changelogs https://github.com/babashka/babashka/blob/master/CHANGELOG.md#2022-12-3009:39buzzdani’m not sure if it was already here but its worth knowing it - Appsflyer open-source libs for protobufs:
https://medium.com/appsflyer/appsflyers-open-source-libraries-for-clojure-and-protocol-buffers-da9a87583c41#2022-12-3019:16Kelvinhttps://github.com/yetanalytics/colossal-squuid v0.1.4 has been released. Things to note:
• Added a uuid->time function to extract a timestamp out of a SQUUID (courtesy of @mithrandir03)
• Extracted the Clojars deployment job into a separate GitHub Action. (You can take a look at the action https://github.com/yetanalytics/actions/blob/main/deploy-clojars/action.yml if you wish to use a similar action for your own deployment pipelines.)#2022-12-3111:52simongrayhttps://github.com/sinostudy/pinyin is a small CLJC library for converting between different styles of the Pinyin romanization system used for Standard Chinese. Unless you are interested in the Chinese language or need to implement e.g. search using romanized Chinese, you probably won’t care about this ;-)#2022-12-3122:03plexusGood stuff! I once wrote a library like this in Ruby, might have been my first open source project https://github.com/plexus/ting#2022-01-0107:48simongrayThis was actually also my first Clojure thing, then it got entangled into a big (now offline) dictionary app, and now it’s been put into this library.#2022-12-3122:02plexusCorgi v1.0 is out, a lightweight Emacs config for the Clojure developer, with vim-style modal editing and Spacemacs-style leader key bindings https://github.com/lambdaisland/corgi#2022-12-3123:08eggsyntaxLooking through the user manual, as I'm currently a spacemacs user but have ambitions to go lighter-weight, and will provide a bit of feedback on what I read if that'll be useful. Context: spacemacs is the only emacs I've used; I've been using it for a few years and have lots of customization, but there are big swaths of emacs knowledge that I don't have yet -- I've just picked stuff up as I needed it rather than really diving deep at any point.
> If you don’t like what any of them is doing, then copy the relevant package over to your personal config and customize it from there.
>
This seems kind of vague to me unless it's spelled out in more detail elsewhere. Do you mean copying the code inside the package to my own init file? Or do you mean importing the package but somehow providing configuration options?#2022-12-3123:53eggsyntaxEverything else in the user manual seemed totally clear! Possibly other feedback when / if I actually install it. Thanks for making it!#2022-01-0101:09plexusLiterally copy the code into your config and tweak from there#2022-01-0110:49jamesThis looks really useful. I tend to use vanilla emacs key bindings but as you say maybe I should try to reduce RSI by going modal in 2022.#2022-01-0121:19vemvSweet! Looks like a valuable contrib to the landscape - we definitely need less monolithic configs that can be understood better#2022-01-0311:54oxalorg (Mitesh)I've been using Corgi for the better part of a year now and I love it. My corgi dotfiles can be found here if someone is interested: https://github.com/oxalorg/.emacs.d#2022-01-0312:13plexusNice @U013MQC5YKD, note that we now standardize on user-keys.el and user-signals.el, so if you use those file names Corkey will pick them up automatically. We now also watch these files for changes, so they reload automatically.#2022-01-0312:14plexusbut you have to use corkey/load-and-watch instead of corkey/install-bindings#2022-01-0312:15plexusring-bell-function 'ignore is now part of corgi-defaults#2022-01-0313:03borkdude#obb: Ad-hoc ClojureScript scripting of Mac applications via Apple's Open Scripting Architecture.
https://github.com/babashka/obb
Demo: https://twitter.com/zaneshelby/status/1477988369154121734
By @zane and yours truly.#2022-01-0313:43brcostahttps://plugins.jetbrains.com/plugin/18108-clojure-extras/ v0.3.0 has been released! clojure-extras is an Intellij plugin to add custom features such as inline evaluation, custom syntax highlighting and linting. In this latest version we added full clj-kondo integration, check it out!#2022-01-0316:36borkdudeMaybe good to add: this is a plugin which runs in addition to Cursive (and depends on Cursive) and does not replace or conflict with it!#2022-01-0320:51Cora (she/her)is there any documentation on how to use this plugin?#2022-01-0321:38borkdude@U02N27RK69K Right now there is only one option:
And if you are connected to a REPL, you get some option to inline evaluate something#2022-01-0321:39borkdudebut I agree some docs would be nice :)#2022-01-0400:54brcostaGood point, I will work on some docs! For now clj-kondo integration is almost zero-conf and to inline evaluate expressions you can use the actions on Tools menu (you can setup keyboard shortcuts in the keymap sections on Preferences). Also, there is a Clojure Extras section on Color Scheme to change custom highlighting.#2022-01-0317:40tony.kayReleased 1.0.0-alpha5 of statecharts: https://github.com/fulcrologic/statecharts which has some new helpers for testing, and a few bug fixes.#2022-01-0317:41tony.kayReleased 1.1.0-RC15 of fulcro-rad which adds load-options to reports to enable things like incremental row detail loading. https://github.com/fulcrologic/fulcro-rad/commits/develop#2022-01-0320:01chrisnI just released https://github.com/clj-python/libpython-clj version 2.014. I had a blast https://github.com/clj-python/libpython-clj/issues/191 to build a Java API into the library (comes with the jar). Also it includes a fastpath for repeatedly calling a python function - https://clj-python.github.io/libpython-clj/libpython-clj2.python.html#var-make-fastcallable.
Go tell all your Java friends that the fastest, most robust, and most featureful python integration available for the JVM now has Java bindings so they can use it without knowing a lick of Clojure.
P.S. - that issue has a lot of interesting information in it and it gets better near the end :-).#2022-01-0320:25metasoarousKICK! ASS!#2022-01-0322:02chrisnThanks :-)!!#2022-01-0322:04Ivangreat work!#2022-01-0509:12rickmoynihanI don’t think I announced this 3 months ago but we forked dogstatsd-clj here.
It is a statsd client, with support for the datadog dogstatsd extensions; the non-datadog specific stuff should also work with other statsd systems, e.g. graphite…
https://github.com/Swirrl/dogstatsd
It makes a few improvements to the original; most notably not using a singleton client for the connection, which makes it much less opinionated and easier to use in component systems e.g. integrant, component etc. This required making a breaking change to the original library; hence it being a fork.#2022-01-0510:49robert-stuttafordnice work! we may end up switching to your version 😁 also, not sure if your update accounts for this or not, but it looks like we missed this Issue:
https://github.com/Cognician/dogstatsd-clj/issues/5#2022-01-0510:56rickmoynihanYes, we fixed that too:
https://cljdoc.org/d/io.github.swirrl/dogstatsd/0.1.39/api/swirrl.dogstatsd#distribution!#2022-01-0512:04borkdudeThis dependency also works with #babashka btw :)
$ bb -cp $(clojure -Spath -Sdeps '{:deps {org.babashka/spec.alpha {:git/url "" :git/sha "1a841c4cc1d4f6dab7505a98ed2d532dd9d56b78"}}}'):test -e "(require '[swirrl.dogstatsd-test]) (clojure.test/run-tests 'swirrl.dogstatsd-test)"
Testing swirrl.dogstatsd-test
Ran 1 tests containing 1 assertions.
0 failures, 0 errors.
{:test 1, :pass 1, :fail 0, :error 0, :type :summary}
@U0JEFEZH6 is running a similar thing with bb on their nodes.#2022-01-0512:09rickmoynihanYes I would have expected it probably would :thumbsup:
I would mention it in the README, but as it stands there’s no CI setup here, and without CI testing it under bb it I’m not 100% comfortable making the claim that it will remain that way… though I don’t expect any major changes to the library anytime soon#2022-01-0512:11borkdudeI already made an issue about it on the bb side, we test a lot of libraries on bb's CI.,
https://github.com/babashka/babashka/issues/1128
If you're open to receiving a github actions config, I can setup both clj + bb tests.#2022-01-0512:12borkdudeYou can introduce bb reader conditionals or just drop bb support at any time of course. We'll just fork the lib if necessary if people find it useful. But you can also use bb reader conditionals to support bb separately from clojure in case of incompatible changes.#2022-01-0512:20rickmoynihanI’m certainly open to seeing it; but I wouldn’t want to waste your valuable time, as we’re currently using circleci for some of our other builds, with some older stuff on travis (probably to be migrated at some point) — and I’d rather not have to introduce a 3rd CI into the mix.
That said we have started using GH actions for some checks, so might not be that big a deal… I’d still like to keep the cognitive overhead down for everyone though#2022-01-0512:23borkdudeI'm also familiar and even a fan of CircleCI, that wouldn't be a dealbreaker to me. But it's ok, I'll just test it at the bb side and if things will break, then we'll just improve bb in the best way we can ;)#2022-01-0512:35rickmoynihanI’m not sure it’s a dealbreaker for me to be honest 🙂
Tell you what, if you are still happy to contribute the GHA — I’ll merge it and if/when we do move to circle, I’ll promise to also include bb support in the tests (and maintain it as best I can)🙂#2022-01-0512:37borkdudesounds good#2022-01-0515:05lukaszOh nice, our statsd client implementation is very simple, but also supports only the bare minimum statsd protocol (so no DataDog extensions like tags etc).#2022-01-0717:23borkdude@U06HHF230 as promised:
https://github.com/Swirrl/dogstatsd/pull/1#2022-01-0717:23borkdudeplease squash the commits into one (github has a squash/merge option)#2022-01-0717:25rickmoynihanWow amazing, thank you so much!
I’ll take a proper look at it on monday as I’m about to finish for the day 🙇#2022-01-0718:25lukasz@U06HHF230 also, if it helps - our (other) Statsd client (which wraps DD's Java lib) runs a "real" UDP server so we can ensure all metrics are sent correctly over the wire, you can find it here: https://github.com/nomnom-insights/nomnom.stature/blob/master/test/stature/helper/statsd_server.clj#2022-01-1009:07rickmoynihan@U0JEFEZH6 Thanks.
I did consider doing something like that, it just didn’t feel worth it at the time — given that it had no tests prior to forking it. The main thing adding the tests was intended to catch was just dumb stuff like syntax errors and calling functions wrongly.
So there are also some specs that test the inputs to format-metric are correct, which I think give a slightly bigger bang per buck than just asserting the string you sent can be received over UDP, though I’d certainly be happy to have a test for that and a few other things.
Unfortunately most of the complexity and testing here is in making sure the metric events are interpreted as expected in your metrics system, and there’s not really a good automated way to do that; at least not one that feels worth the complexity cost.#2022-01-0518:10Alex Miller (Clojure team)https://clojure.org/releases/tools#v1.10.3.1058 is now available
• https://clojure.atlassian.net/browse/TDEPS-207 Fix deadlock in version range resolution
• https://clojure.atlassian.net/browse/TDEPS-215 Fix race condition during parallel loading of s3 transporter
• Don’t track local deps.edn manifest for caching if deps project doesn’t have one
• Update maven-core to 3.8.4, aws libs, tools.build, tools.tools to latest
• Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.12.1109#2022-01-0603:52emccueEver wanted to build Java programs with Java - no maven or gradle? I made a very basic wrapper around tools.build that should make it easier to write build programs for deps.edn in Java
Super alpha. Functionality may be broken or missing entirely.
https://github.com/bowbahdoe/jproject
https://github.com/bowbahdoe/jproject-example#2022-01-0603:57seancorfieldThe example seems to suggest you still need the Clojure CLI installed for this to work?#2022-01-0604:05emccueyep. Still nowhere near a state i could walk up to a stock Java dev and convince them, but enough to show the concept imo#2022-01-0604:12emccuethe next steps would be
1. Think way more about how to expose the basis concept
2. Fill out and document the build tools wrapper
3. Wrap the clojure CLI’s functionality - probably making a graalvm executable with a “simplified” api probably along the lines of
jproject --help
jproject --tree
jproject --pom
jproject run src/Something.java
jproject run --alias=build build/Build.java
jproject run --alias=build build/Build.java --argForBuildProgram 123
#2022-01-0604:12Alex Miller (Clojure team)Terrifying#2022-01-0604:28emccuegood#2022-01-0604:33Alex Miller (Clojure team)I feel bad that you're spending time making it#2022-01-0604:35emccuewhy so?#2022-01-0604:37Alex Miller (Clojure team)just pouring concrete over all that lovely clojure#2022-01-0604:39emccuemakes for good rebar#2022-01-0604:39Alex Miller (Clojure team)I've added options to those build tasks at least a dozen times in the last 6 months. every time I do that, you'll have to add new fields and methods and whatever#2022-01-0604:40emccueif anyone uses it, which i doubt#2022-01-0604:44emccueand if i get it into a workable/marketable state, which is doubtful. Especially considering that no IDE resolves deps.edn dependencies without a clojure plugin so any effort to make it seem “java native” is probably moot#2022-01-0604:45emccueand anyone who is comfortable installing a clojure plugin might as well just write the build program in clojure#2022-01-0605:10emccueNOW you can feel bad#2022-01-0605:39seancorfieldYou sure are dedicated to this 🙂#2022-01-0606:49gklijsNot really, and if I did I would use jbang, https://jbang.dev/#2022-01-0615:08emccuebut can jbang let me stay up until 4am writing a script for test coverage
public final class GenerateCoverage {
public static void main(String[] args) throws IOException {
var execFileLoader = new ExecFileLoader();
execFileLoader.load(new File("jacoco.exec"));
var htmlFormatter = new HTMLFormatter();
var fileMultiReportOutput = new FileMultiReportOutput(new File("target/coverage/html"));
var visitor = htmlFormatter.createVisitor(fileMultiReportOutput);
var coverageBuilder = new CoverageBuilder();
for (var file : Files.walk(Path.of("target", "src"))
.filter(Files::isRegularFile)
.map(Path::toFile)
.toList()
) {
var analyzer = new Analyzer(execFileLoader.getExecutionDataStore(), coverageBuilder);
analyzer.analyzeAll(file);
}
var bundle = coverageBuilder.getBundle("project");
visitor.visitInfo(
execFileLoader.getSessionInfoStore().getInfos(),
execFileLoader.getExecutionDataStore().getContents()
);
visitor.visitBundle(bundle, new ISourceFileLocator() {
@Override
public Reader getSourceFile(String packageName, String fileName) throws IOException {
var resource = GenerateCoverage.class.getResourceAsStream(
packageName.replace(".", "/") + "/" + fileName
);
if (resource == null) {
return null;
}
return new InputStreamReader(resource);
}
@Override
public int getTabWidth() {
return 4;
}
});
visitor.visitEnd();
}
}
Which as horrible as it sounds and looks - a team of 10 engineers could not figure out how to properly filter certain files out of coverage for a week with the maven plugin (actual story, not an overstatement for dramatic effect)#2022-01-0615:33ericdalloAmazing! I'll certainly change my java code on clojure-lsl to use that!#2022-01-0619:36borkdudeThis reminds me of a Java API I once wrote for SCI. After 2 months I just gave up and told people to make their own dedicated Clojure wrapper and call that from Java.#2022-01-0719:56AJ JaroWhat a terrifying adventure!#2022-01-0700:33marinacavalariHey everyone! I'd like to share you my first open source project. As a Data Engineer I felt some lack of tools and libraries to interact with one of the most used data platform, Databricks. So in this sense, I'm releasing the first part of https://github.com/marinacavalari/databricks-sdk-clojure, completely in clojure. It contains only a few function to access the API, but I'll keep working on that, every feedback is very welcome 🙂 thanks#2022-01-0702:57EddieThis is exciting! We have relied heavily on Databricks at work for years and I will definitely be checking this out. We are a 100% Scala shop, but I am always looking for ways to sneak Clojure in!
Out of curiosity, do you have any experience deploying spark apps written in Clojure to Databricks? If so, how what tools do you use to make that happen?#2022-01-0712:38marinacavalarihi Eddie! Yeah all our interactions with Databricks nowadays rely on clojure. We use it to load datasets into Databricks metadata, schedule jobs, create single user clusters, and more, if you like, call me dm and I can share with you some tips#2022-01-0814:13Jakub Holý (HolyJak)Awesome! Good luck with the library!#2022-01-0711:54pezA new Calva version just published: 2.0.233.
• https://github.com/BetterThanTomorrow/calva/issues/953
• Maintenance: https://github.com/BetterThanTomorrow/calva/pull/1447
• Fix: https://github.com/BetterThanTomorrow/calva/issues/1444
The major change In Calva itself here is the VS Code Testing UI integration, contributed by @marc-omorain. Thanks Marc! ❤️ gratitude Then Calva also automatically picks up many of the wonderful nrepl/orchard improvements. (No side-loading support yet, though. If you understand this concept well and want to contribute of your time to Calva, please do!) Here’s demo of the test ui stuff: https://www.youtube.com/watch?v=bUBrmvczAwg#2022-01-0719:37Carsten BehringA new release of , the idiomatic machine learning library for Clojure, is out.
Version 0.1.2 makes the library as well java 1.8 compatible.
https://clojars.org/scicloj/scicloj.ml/#2022-01-0819:04yogthosannouncing a new Clojure web framework with some lessons learned from Luminus https://yogthos.net/posts/2022-01-08-IntroducingKit.html#2022-01-0907:51Teemu KaukorantaI see a lein-template folder in the repo, do you still use leiningen for something or is it just a leftover from Luminus?#2022-01-0915:17yogthosoh, clj-new uses the same template structure as leiningen#2022-01-0915:20eskosThere's unfortunately a name clash with https://github.com/gregsh/Clojure-Kit, I wonder how SEO will get confused by this...#2022-01-0916:25ChaseWhere would you like discussion on this? Are you thinking of starting a #kit channel?#2022-01-0916:38borkdude@U9J50BY4C #kit-clj#2022-01-0916:41Chasety! Moving my question to there.#2022-01-0917:40yogthosand didn’t realize clojure-kit existed, I guess this could lead to a bit of confusion, at least the domains are non overlapping :)#2022-01-0918:19borkdudethere's also http-kit. kit is a pretty bad name of you're optimizing for search engines ;)#2022-01-1114:43eccentric JLooks great! Nice job#2022-01-0915:34AdoHey all! Notion to MD is a working release of the tool that the team at Flexiana built to automate synchrony between Notion and Readme files. But one can broaden the use case list indefinitely. Like backing up Notion data locally. As well as syncing Org files with Notion. Or moving data between Notion and any other service/location there is. The list goes on! https://github.com/Flexiana/notion-to-md#2022-01-0918:33EugenAnnouncing calcite-clj https://github.com/ieugen/calcite-clj .
A small library to allow writing Apache Calcite adapters in Clojure.
Calcite is a relational algebra library that can expose any data source as SQL.
It's used for data federation.
There is an example if you are curious how sample code looks: https://github.com/ieugen/calcite-clj/blob/main/examples/simple/src/calcite_clj/simple.clj .#2022-01-0919:32refsetThis looks fun 🙂 what was the main movitation behind it?
Also, out of curiosity. have you taken a look at XTDB's Calcite->Datalog implementation before? https://github.com/xtdb/xtdb/tree/master/modules/sql (I'm sure it could make use of a few of the tricks you discovered!)#2022-01-0919:37Eugenhi, a personal project - trying to implement OFBiz entity engine on top of Calcite - perhaps even use it at work.
I did not know about that.
I was thinking about implementing datalog on top of Calcite - seems it's not such a crazy idea.
Don't see a lof of docs around that module.
Can it be used outside xtdb ?#2022-01-0919:38EugenFound something https://docs.xtdb.com/extensions/1.20.0/sql/ .
Will check it out when I have some time#2022-01-0919:43refset> Can it be used outside xtdb ?
Not currently, it can only be used to query data that has been indexed (via Datalog)#2022-01-0919:45refset> I was thinking about implementing datalog on top of Calcite - seems it's not such a crazy idea.
Absolutely! There seems to be quite a bit of interest in that these days, e.g. https://github.com/EvgSkv/logica (note that the readme says "In the future we plan to support more SQL dialects and engines")#2022-01-0923:28Adam HelinsDear friends,
I prepared this POC which aims to transcribe the Clojure ecosystem in a knowledge graph powered by Logseq: https://clojupedia.github.io/#/page/contents
It is currently poor in content since this is only a crude prototype demoing the key ideas. It aims to offer visibility and discoverability of the Clojure ecosystem, libraries and miscellaneous tools. A powerful way of having a glimpse at the state of the ecosystem, how projects and libraries are related, linked, all of this complemented by a powerful search engine.
Please, follow the "About" section and related links which explain what it is, how it works, and how it differs from previous attempts.
Feedback welcome! I think it has the potential to evolve into a really powerful tool for Clojure devs if it becomes community-driven 🙂
Also an awesome opportunity to learn Logseq if you are not familiar with it. Attention, it may change your life.
https://github.com/clojupedia/main#2022-01-0923:50Daniel SlutskyFantastic#2022-01-1007:34Jakub Holý (HolyJak)Awesome!
So Logseq is like Royal our Athens but with (better?) task management and built - in querying and query -> view capabilities?#2022-01-1008:26Adam HelinsAthens is also a good bidirectional note taking app to recommend, without a doubt. It is less feature-rich but has a very good story for collaboration (within a team for instance).
I picked Logseq because a Git based collaboration is well-suited for that kind of project and indeed, it has extra features that makes it perfect IMO for that kind of use case.#2022-01-1011:37Vladislavhi guys
hope it helps 😃
https://my.mindnode.com/9a9kwhAnUszRCXxspTdeQnfGXtE6V2Ey3FiiyVZE#2022-01-1018:51robert-stuttafordthis is pretty damn cool, @UCFG3SDFV!#2022-01-1019:08An VuLogseq!!! ❤️#2022-01-1011:45vemvEastwood - code linter - https://github.com/jonase/eastwood/blob/Release-1.1.0/changes.md#changes-from-100-to-110
Eastwood turns 10 years! Celebrating with compatibility with the upcoming Clojure 1.11 release.#2022-01-1021:20Joshua Suskalohttps://github.com/IGJoshua/coffi version 0.3.298 is released!
• Added a function for standard C-style layout rules with padding to add to structs
• Fixed a bug with characters being read as UTF-16 instead of ASCII code points
coffi is a Foreign Function Interface for Clojure on JDK 17 that's designed to make C-wrapper libraries easy to write and feel like native Clojure libraries.#2022-01-1021:49borkdudeCongrats!
> And then adding `"org.suskalo/coffi"` to the `:config-paths` key in your `.clj-kondo/config.edn` file.
This part is no longer needed since the last clj-kondo.#2022-01-1021:53Joshua SuskaloOh awesome, thanks!#2022-01-1113:34mpenetInitial (early) release of https://github.com/exoscale/lingo - a lib that extends spec explain-data and helps with formatting error messages from these extensions#2022-01-1114:41borkdudePerhaps a section on how it differs from expound could be useful?#2022-01-1114:43borkdudeWhen I try to load it with bb I get:
$ bb -cp $(clojure -Spath -Sdeps '{:deps {org.babashka/spec.alpha {:git/url "" :git/sha "1a841c4cc1d4f6dab7505a98ed2d532dd9d56b78"}}}') -e "(require '[exoscale.lin
go])"
----- Error --------------------------------------------------------------------
Type: clojure.lang.ExceptionInfo
Message: Cyclic load dependency: [ exoscale.lingo ]->[ exoscale.lingo ]
Why does the namespace load itself?#2022-01-1114:45mpenethmm, odd#2022-01-1114:45borkdudeif I remove that it works:
$ bb -cp ... -e "(require '[exoscale.lingo :as l] '[clojure.spec.alpha :as s]) (s/def ::int int?) (l/explain ::int :foo)"
1 error found
:foo is an invalid :user/int - should be an Integer
#2022-01-1114:45mpenetclj-kondo didn't warn me about this one, your fault 🙂#2022-01-1114:46borkdudetouché :)#2022-01-1114:46mpenetI ll release a new version now#2022-01-1114:46mpenetyeah, it's intentionally no-dependency, runs in bb and I guess in cljs without too much trouble#2022-01-1114:47mpenetI didn't mention expound directly but I do mention that lingo is more data centric, expound works on explain and explain-str#2022-01-1114:47mpenetlingo focuses on explain-data and makes this the base for everything else#2022-01-1114:48mpenetexpound has no (exposed) intermediary data representation in short (afaik)#2022-01-1114:50borkdudecool#2022-01-1115:01mpenetanother thing, expound does not try to give a way to interpret predicates from the user side. Every custom message has to be applied on a registered spec and if/when that spec rejects a value it will just return that message, there's no predicate context#2022-01-1115:02mpenetno "parameterized" error if you want#2022-01-1115:03mpenetI wanted to have this added to expound but the author didn't like the idea. hence lingo#2022-01-1115:04borkdudeall makes sense#2022-01-1115:43ikitommilooks great! have you checked how this effects the js-bundle size?#2022-01-1115:45mpenetno clue, I am not even sure the current code runs in cljs (it should but I didn't test it). It's a very early release, in many ways, there are a lot of perf improvements that are possible left & right as well, the current impl. for pred parsing is quite naive for instance.#2022-01-1115:46mpenetbut all that will come in time#2022-01-1115:46mpenetplease don't benchmark it against malli now 🙂 that would hurt I am sure#2022-01-1205:46ikitommikeeping js-bundle size small is not easy, defs & multimethods can’t be DCEd and anything they use will be dragged in too, e.g. regex-schemas etc. Not a concern in most apps, but still a concern.#2022-01-1205:46ikitommiat some point, want an expound-grade prettier printer for malli too, current just Fipps out with colors, not marking errors / hiding details on large errors. Good to see more development in this space.#2022-01-1207:23borkdudeIf you want a small Js bundle then don't load spec(s) and move them to the side #2022-01-1208:52mpenetyeah, arguably that should be mostly for dev time usage in cljs, or cases where you just don't care.#2022-01-1208:53mpenetI thought about using fipp, but for now I like being dependency free. But I also know pprint is crazy slow, so we'll see#2022-01-1208:54mpenetit would be nice to have spec/select spec/schema as a library until spec2 settles (if ever), I suppose that could mitigate some of that#2022-01-1208:54borkdudethere are some tricks to remain dependency free + optional namespaces which, when loaded, register some "plugin" which, if available, can be used for certain features.#2022-01-1208:55mpenetyes I did use that in other projects, but not with cljs#2022-01-1208:55mpenetit's a bit hairy tho#2022-01-1208:55mpenetdepending on what the lib does and its size, just copying the code is often better imho#2022-01-1208:56mpenet(with attributions of course)#2022-01-1208:56borkdudeanother option is to provide the dependency function just an as argument option and you can program against some protocol#2022-01-1208:56mpenetyes#2022-01-1208:59borkdudeI do a similar plugin thing in #nbb where cljs.pprint is compiled into a different module than the rest of the stuff. So when you don't use cljs.pprint you don't load that 200kb of JS all the time. Everything is advanced compiled.#2022-01-1209:00mpenetI think I might just throw in a try requiring-resolve .... around fipp fn and be done with it#2022-01-1209:01mpenetwell, I need to check if requiring-resolve actually works with cljs#2022-01-1209:01borkdudeno#2022-01-1209:01borkdudeand it's not so good with graalvm native image either. This is a better approach:
https://github.com/seancorfield/honeysql/pull/378/commits/e331ba0a0e44bec5da7e094f0c699181dd8d6cde#2022-01-1209:02mpenetthx for the pointer#2022-01-1209:03borkdudeI.e. do the resolving on the top level. For CLJS you will have to require people to load a namespace and in that namespace you can register whatever function you need. If that functions isn't available (due to the namespace not having loaded) then you assume the user doesn't want to use that dep.#2022-01-1209:03borkdudeCLJS namespaces are static.#2022-01-1209:04borkdudeAnd only top level ns forms (or require, but to simplify ignore this) are allowed#2022-01-1209:04borkdudeHere is another solution that works in both CLJ and CLJS: https://github.com/borkdude/dynaload#2022-01-1209:05borkdudebut I prefer the namespace solution, that simplifies things drastically and also works in babashka even.#2022-01-1209:06borkdude(ns core-ns)
(def optional-function (volatile! nil))
(defn api-fn []
(if-let [f @optional-function ...] ...))
(ns optional-ns (:require [core-ns] [pprint]))
(vreset! core-ns/optional-function pprint/pprint)
#2022-01-1209:07borkdudeREADME: to use pprint, require optional-ns in addition to core-ns.#2022-01-1209:29mpenetI ll have a look tonight if I can do something like that#2022-01-1209:33ikitommijust getting the humanized error messages from specs is actually useful in normal CLJS apps, e.g. with form validation. Seen libs like https://github.com/alexanderkiel/phrase used there.#2022-01-1209:36mpenetyeah, I have seen that one as well.#2022-01-1209:41mpenetI personally prefer to stay close/extend explain-data output, it's easier to port to it and also staying at the explain-data.problems[] level makes it easier to use in various contexts (web-form rows, cli, backend etc). But the more the merrier. All these libs are not a lot of code.#2022-01-1209:42mpenetThat said it would be nice if the focus/highlighting part could be shared#2022-01-1209:43mpenetthe ~^ stuff#2022-01-1209:43mpenetand possibly other bits#2022-01-1210:06ikitommiyes, the ^ stuff. did a placeholder repo 3y ago for just pretty error printing lib, but no time, have copy-pasted the same fipp-stuff between libs (reitit, malli). Modular, but incomplete (and works with expound) https://github.com/metosin/virhe#2022-01-1210:26mpenetthat one you mean? https://github.com/metosin/malli/blob/master/src/malli/dev/virhe.cljc#2022-01-1210:26mpenetyeah fipp api is quite nice for this#2022-01-1212:01ikitommiyes, that, here’s it in action: https://twitter.com/ikitommi/status/1480215765143932931#2022-01-1212:52emilaasaLooks real neat! Will try it out#2022-01-1211:59borkdudeThe #etaoin babashka pod has an update (last update was August 2021):
It allows you to use etaoin from babashka scripts. Other than writing UI tests, I also use it together with a file-watcher to refresh the browser while I'm writing docs (see https://github.com/babashka/book/blob/master/script/watch.clj).
• Add `wait` in `pod.babashka.etaoin` https://github.com/babashka/pod-babashka-etaoin/issues/11 (https://github.com/mprokopov)
• Upgrade to etaoin 0.4.6
• Add `pod.babashka.etaoin.query/expand` https://github.com/babashka/pod-babashka-etaoin/issues/10
See https://github.com/babashka/pod-babashka-etaoin#run how to use it.#2022-01-1300:14bedersetaoin is pretty sweet! Glad to have it as pod now#2022-01-1300:59tony.kayReleased Fulcro RAD 1.1.2. https://github.com/fulcrologic/fulcro-rad
• Adds support for custom form save mutations, and save parameters on forms
• Fixes missing support in date/time formatting (on the js side) for literals in the timestamp (via ’)
• Adjusts deps to fix tests due to the intentional NPM self-sabotage of colors.js#2022-01-1315:04borkdudeclj-kondo 2022.01.13: a linter for Clojure code that sparks joy ✨ clj-kondo
• Add linter `:conflicting-fn-arity`: warn when an arity occurs more than once in a function that overloads on arity. https://github.com/clj-kondo/clj-kondo/issues/1136 (https://github.com/mknoszlig)
• Add linter `:clj-kondo-config` which provides linting for `.clj-kondo/config.edn`. https://github.com/clj-kondo/clj-kondo/issues/1527
• Relax `:reduce-without-init` for functions known to be safe https://github.com/clj-kondo/clj-kondo/issues/1519
• Symbol arg to `fdef` can be arbitrary namespace https://github.com/clj-kondo/clj-kondo/issues/1532
• Improve potemkin generated var-definition analysis https://github.com/clj-kondo/clj-kondo/issues/1521 (https://github.com/ericdallo)
• Stabilize cache version independent from kondo version https://github.com/clj-kondo/clj-kondo/issues/1520. This allows you to re-use the cache over multiple kondo versions.
• :output {:progress true} should print to stderr https://github.com/clj-kondo/clj-kondo/issues/1523
• Only print informative messages when `--debug` is enabled. https://github.com/clj-kondo/clj-kondo/issues/1514
• Add Sublime Text instructions https://github.com/clj-kondo/clj-kondo/issues/827 (https://github.com/KyleErhabor)
• Fix end location in anonyous function body https://github.com/clj-kondo/clj-kondo/issues/1533
• Bump datalog-parser to 0.1.9: allows symbol constants in datalog expression
#2022-01-1316:20ericdalloAlready bumped clojure-lsp, should be available on next release!#2022-01-1318:04kipzJust released 0.0.1 of debian-version-clj - parser for debian-version strings https://github.com/kipz/deb-version-clj because I couldn't find any that worked for the JVM#2022-01-1318:09borkdudeCool! Are you also aware of version-clj? https://github.com/xsc/version-clj
user=> (require '[version-clj.core])
nil
user=> (version-clj.core/parse "6.0-4.el6.x86_64")
{:version [(6 (0 4) ("el" 6) ("x" 86 "_" 64))], :qualifiers #{}, :snapshot? false, :qualified? false}
#2022-01-1318:14kipzYeah, I saw that. You thinking there may be some way to integrate? The debian version scheme is pretty funky, so nobody would want to use it by default I would have thought - but we could come up with some way to choose the scheme I guess.#2022-01-1319:03borkdudecool make sense!#2022-01-1321:40Alex Miller (Clojure team)Clojure https://clojure.org/releases/devchangelog#v1.11.0-alpha4 is now available
• https://clojure.atlassian.net/browse/CLJ-2673 Add abs, and update min and max to use Math impls when possible
• https://clojure.atlassian.net/browse/CLJ-2555 Add iteration generator function
• https://clojure.atlassian.net/browse/CLJ-2621 Fix unnecessary boxing of unused return in statement context for instance method expr
• https://clojure.atlassian.net/browse/CLJ-2663 Fix vector = not terminating when called with infinite sequence
• https://clojure.atlassian.net/browse/CLJ-2679 Fix hash collisions in case expressions on symbols
• https://clojure.atlassian.net/browse/CLJ-2670 Use Math.exact… methods for checked long math ops for performance
• https://clojure.atlassian.net/browse/CLJ-2680 Fix type hinting a primitive local with matching type hint to not error
• https://clojure.atlassian.net/browse/CLJ-2234 Fix multimethod preferences using only global hierarchy
• https://clojure.atlassian.net/browse/CLJ-2556 Fix into completion so halt-when works
• https://clojure.atlassian.net/browse/CLJ-2665 Fix require with :as and :as-alias to load
• https://clojure.atlassian.net/browse/CLJ-2677 clojure.math - fix method reflection in bodies and inlines, fix docstrings, renamed
• https://clojure.atlassian.net/browse/CLJ-1379 clojure.test - fix quoting of :actual form in :pass maps
• https://clojure.atlassian.net/browse/CLJ-2493 clojure.java.browse - fix browse-url hanging on call to xdg-open
• https://clojure.atlassian.net/browse/CLJ-2611 clojure.xml - Stop processing XXE expansions by default
• https://clojure.atlassian.net/browse/CLJ-2684 Update contrib deps to latest (spec.alpha, test.check, test.generative)
We rely on the community's help in testing new alphas. If you do test your codebase with 1.11.0-alpha4, and can leave a ✅ or ::x: (hopefully with more info in the thread), that would be super useful.#2022-01-1323:29seancorfieldSo far I've opened issues against three libraries that define their own abs function now that clojure.core/abs exists and causes a warning.#2022-01-1323:44Alex Miller (Clojure team)yeah, that's inevitable (I updated test.check and math.numeric-tower)#2022-01-1323:48seancorfieldIn case anyone is interested, those three (so far) are: clojure.java-time, medley, and zprint.#2022-01-1323:53Alex Miller (Clojure team)the new abs in core is for real better in multiple ways (perf - reaches jvm hotspot intrinsics, polymorphism over all numeric types, portable when impl'ed in cljs)#2022-01-1323:54seancorfieldI updated the example in https://clojuredocs.org/clojure.core/halt-when to note that it works with into in Alpha 4.#2022-01-1400:00Alex Miller (Clojure team)the master api docs have been updated at https://clojure.github.io/clojure/branch-master/index.html if that's useful to anyone, new stuff in alpha4:
• https://clojure.github.io/clojure/branch-master/index.html#clojure.math namespace - many new fns
• https://clojure.github.io/clojure/branch-master/clojure.core-api.html#clojure.core/abs
• https://clojure.github.io/clojure/branch-master/clojure.core-api.html#clojure.core/iteration - more docs to come on this (and core.async variant)
• https://clojure.github.io/clojure/branch-master/clojure.java.shell-api.html#clojure.java.shell/launch (added for the browse-url fix)
• https://clojure.github.io/clojure/branch-master/clojure.xml-api.html namespace has some new stuff but really it's all there to give you options to fall back to prior behavior for XXE if you really need it (but it's a security issue and you probably don't)#2022-01-1400:05seancorfieldOur test suite passes without any issues on Alpha 4. It'll be up on our staging cluster soon for additional testing.#2022-01-1400:35phillThe new safeguard related to XML external entities is a breaking change! It will especially affect document-preparation apps dating from before the xlink era. Therefore, in the formal announcement, a nice prominent notice would be thoughtful.#2022-01-1401:24Alex Miller (Clojure team)This is just an alpha, there will be a release notes by the time we get to the RCs with more stuff like this#2022-01-1401:24Alex Miller (Clojure team)So, yes, there will be#2022-01-1406:47pez@UKC33JMU3 does this fix your issue with the ClojureScript repl start on Linux?#2022-01-1408:34borkdudeLooking forward to some examples of iteration#2022-01-1409:09brendnz@U0ETXRFEW, afraid not; I still have to use the custom connect sequence, but at least that still works.#2022-01-1411:49Lukas Domagalaall the tracing and introspection in omni-trace still works.#2022-01-1414:36imreNice one on all the reflection stuff, thank you Alex!#2022-01-1420:49seancorfieldWe have 1.11 Alpha 4 in production for two of our apps and several of our cron job processes.#2022-01-1509:16brendnz@U0ETXRFEW, it appears the best advice for Calva learners on Linux systems is to have the browser already open before using "fire up the ClojureScript Quick Start Browser REPL".
My custom connect sequence, I have since learnt, is necessary for me only if my browser is not already open.
I tested the "browser-already-open" scenario today after reading Andy Fingerhut's September 2, 2019 (https://clojure.atlassian.net/browse/CLJ-2493) post:
"I found that if you start [a browser], e.g., then start a Clojure REPL and eval a browse-url expression, the REPL prompt comes back quickly, as expected. Similarly if you start a Clojure REPL, then [a browser], then eval the browse-url expression.
The only case in which the eval of a browse-url expression does not quickly come back with a prompt is if [the browser] was not yet started, and eval'ing browse-url caused it to start."
You asked if 1.11.0-alpha4 helped me open the ClojureScript REPL, and my test showed it did not. I now know why you thought it might. It fixes "clojure.java.browse/browse-url hangs calling xdg-open", as @U064X3EF3, @U050ECB92, and @U050WRF8X mention in their video of today at https://www.youtube.com/watch?v=6vmTKoPzJUo&t=5184s .
Apparently, it has always worked if the browser is already open! Unless it was opened by a prior jack-in, as a new jack-in closes such an already open browser in my experiment; but not an independently opened browser.
It takes 8 seconds on my machine for the browser page to load after the clj prompt appears in output.calvap-repl pane and then another 4 seconds for the cljs prompt to appear. So it takes 12 seconds to be sure the jack-in has not failed.
@U04V70XH6 and @U0ETXRFEW , Alex thinks its "a weird little rabbit hole that most people never look at, never worry about, never think about", except us. Rounding to the nearest 10%, I think half the people use Clojure on Apple machines and half use it on Linux machines. I would have thought more Linux users would notice, if it were not for the fact they have their browsers already open nearly all the time. Sean, does 1.11.0-alpha4 fix it for you?
Technically it does not fix it for me. Practically it does and I am very happy with the whole exercise. I just have to have my browser already open or use my custom connect sequence.
Alex says "We rely on the community's help in testing new alphas. If you do test your codebase with 1.11.0-alpha4, and can leave a [tick] or [cross] : (hopefully with more info in the thread), that would be super useful".
I am happy with attempted fix and want to leave a tick, but of course I need to leave a cross, as CLJ 2493 does not totally fix it for me, assuming my problem is actually the same problem.
My system is Ubuntu 20.4 running in WSL2.#2022-01-1511:14pez@UKC33JMU3 iiuc, the check/cross is rather about wether this build breaks something that previously worked or if some particular fix does not do what it states to do. There is probably an issue tracking the problem you hit (manifesting in problems with the ClojureScript Quick Start on Linux). To me it was just the long shot of an optimist that it was fixed with this alpha.#2022-01-1514:07Alex Miller (Clojure team)@UKC33JMU3 do you have a link to your issue? #2022-01-1521:46seancorfieldI can confirm that on Windows/WSL2/Ubuntu with google-chrome not open, the following command still hangs and does not show a prompt, even though the browser opens and shows the cljs welcome page:
$ clj -Sforce -Sdeps '{:deps {org.clojure/clojurescript {:mvn/version "RELEASE"}}}' -M:1.11 -m cljs.main -r
(the :1.11 alias brings in Clojure 1.11.0 Alpha 4). As @UKC33JMU3 observes, if you open google-chrome first, it works. It also works if you specify {:launch-browser false} in the REPL options, and then start the browser manually at the given URL (http://localhost:9000) per the caveat in the Quick Start. I don't know if there's an issue for this specific case (but having the browser open is likely to be common for Linux users in general I suspect -- but less common for WSL2 users (5% of Clojurians, according to the last State of Clojure survey).#2022-01-1522:28phillHi all, the new clojure.java.shell/launch function deadlocks if the launched process writes to stderr or stdout beyond the OS' puny buffer. This is described in the Javadoc at https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/lang/Process.html, "Because some native platforms only provide limited buffer size for standard input and output streams, failure to promptly write the input stream or read the output stream of the process may cause the process to block, or even deadlock."
A workaround is to use ProcessBuilder, and .redirectError and
.redirectOutput to java.lang.ProcessBuilder$Redirect/DISCARD before calling start.#2022-01-1522:30borkdudeOr use Inherit, depending on if you actually want to see the output or not.#2022-01-1522:30borkdudeI think this might also be a problem in tools.build process.#2022-01-1522:36brendnzHi @U064X3EF3, it has just been discussions with @U0ETXRFEW and @U04V70XH6. The following thread has a screenshot of what happened on my system.
I was going to add screenshots from a discussion with Sean Corfield, but he has written a much better summary as I write this reply.
The post at https://clojurians.slack.com/archives/CBE668G4R/p1641774856063000 shows the point at which :launch-browser can be set to false in Calva, and Sean (prior post) and the Quick Start page (below) shows where it can be set to false in the command line.
I was going to suggest do you not think the solution is for the ClojureScript Quick Start page (https://clojurescript.org/guides/quick-start) to insert:
"starting your browser first or"
… where it says:
If you are running Linux and the REPL does not start, try [starting your browser first or] disabling browser auto-launch and opening manually:
clj -M --main cljs.main --repl-opts "{:launch-browser false}" --compile hello-world.core --repl
But we can take it from Sean's post that at least 5% of all new Clojurians will be hit by this problem, and I wonder if that would be insufficient.
Just as I am about to post this, I see a couple of interesting posts just added by @U0HG4EHMH and @U04V15CAJ so far above my pay-grade I can only guess they contain possible solutions.#2022-01-1605:11brendnzHi @U0HG4EHMH and @U04V15CAJ, what you say and refer to is interesting and no doubt spot on. Fancy the robustness of the system (Java processes communicating on Linux) being so fragile and dependent on contingent facts such as whether buffers are not cleared quick enough.#2022-01-2110:23Ivar RefsdalRe
https://clojure.atlassian.net/browse/CLJ-2555 Add iteration generator function
I've given this a spin, and find it to be working fine.
Here is a https://gist.github.com/ivarref/41d4914b1ec3936ad83e0ed9a9c8517d demonstrating iteration over a https://relay.dev/graphql/connections.htm.
The only thing I did not feel was quite "natural" was the need for mapcat identity.
For my typical usage I would iterate over a single list/seq, not over pages and then over the page list.
Should there be a iteration-cat version, or perhaps a :vcatf function?
CC @U050ECB92 @U04V15CAJ#2022-01-2110:26borkdudeI'm not an expert by any means on this topic, but I wonder if @U050ECB92 has seen this article which highlights some potential problems with iteration . Just sharing it in case he hasn't seen it.
https://github.com/leonoel/missionary/wiki/Iterative-queries#2022-01-2110:29borkdude@UGJE0MM0W Example looks neat! Looks like a great fit for your use case.#2022-01-2110:53imreInteresting links. What I don't really get in the one @U04V15CAJ linked is this statement: IReduceInit doesn't have these problems, but is not composable either (not in practice, at least). Why would IReduceInit not be composable?#2022-01-2116:41ghadi@UGJE0MM0W we have considered the catting aspect, in fact the core.async version has an arg :vsf (instead of :vf )#2022-01-2116:42ghadi(into [] cat (iteration step :vf ....) is a nice way to do that too. (Beware of side-effects + lazy-seq!)#2022-02-0220:10seancorfieldJust FYI, as a follow-up to my January 14th message above, we now have Clojure 1.11.0 Alpha 4 in production for all processes 🎉#2022-01-1422:12Carsten BehringA new release of , the idiomatic machine learning library for Clojure, is out.
Changes in version 0.1.4 :
improvement of the evaluate-models function by unifying the dissoc-in and handler-fn options. (breaking change)
https://clojars.org/scicloj/scicloj.ml/#2022-01-1423:10hlship[ANN] com.walmartlabs/lacinia 1.1 and lacinia-pedestal 1.1
Lacinia is an open-source implementation of the GraphQL specification, in Clojure.
GraphQL is an outstanding approach to getting diverse clients and servers exchanging data cleanly and efficiently.
GitHub repo: https://github.com/walmartlabs/lacinia
Documentation: https://lacinia.readthedocs.io/en/latest/
lacinia 1.1 is mostly focused on stability and performance improvements.
lacinia-pedestal adds support for accessing Lacinia GraphQL as an HTTP endpoint
GitHub repo: https://github.com/walmartlabs/lacinia-pedestal
Documentation: https://lacinia-pedestal.readthedocs.io/en/latest/
lacinia-pedestal 1.1
A subtle bug in subscriptions was fixed.
There is now support for caching parsed queries in memory.#2022-01-1709:38wotbrewHi all 👋, I'm pleased to announce an early alpha of relic is now available. 🎉
relic is an in memory database and data processing library with a closer-to-sql query dsl, constraints and incremental materialized views. I do not know if its a good, ok, or terrible idea - but I wanted something like this to exist so I could better find out.
github: https://github.com/wotbrew/relic
channel: #relic
Questions, discussion (and contributions!) massively appreciated.#2022-01-1711:06Lukas DomagalaThis looks really interesting, great work!
I know its still in alpha, so performance is probably still way worse than it could be.
Disclaimers aside, how would the materialized views compare to something like re-frames subscribers?
I know that replacing it with datascript is a lot slower, but this seems like more performant alternative.#2022-01-1711:11wotbrewI haven't published any benchmarks yet, but perf should be competitive with the competition, YMMV! Main things to be aware of would likely be memory usage and write performance if you materialize a lot of queries. Certainly a design goal is to be able to use relic with react and invalidate hooks / ratoms directly using tracked-transact. Relic is just a fancy signal graph itself so its quite natural to do this.#2022-01-1711:14wotbrewThe upper ceiling on perf tuning for something like this is basically 'write a compiler' so lots of room at the top.#2022-01-1711:17Lukas Domagalathank you for the quick reply. I’ll defiantly play around with it, looks very interesting.#2022-01-1711:29martinklepsch@U0GE2S1NH the usage with React is also something I’d be interested in, please keep sharing how that turns out 🙂#2022-01-1711:30wotbrewhttps://wotbrew.github.io/relic/change-tracking/#2022-01-1711:30wotbrewif you want to go down this rabbit hole happy to talk in #relic#2022-01-1711:30wotbrewI have a hacky demo of its use with reagent - I'd love to see somebody build a glue library that makes it a little less hacky. I don't currently spend a lot of time working on cljs ui's.#2022-01-1713:32Lukas DomagalaBTW, you mentioned that recursive queries aren’t implemented yet. Did you just not get around to it yet or is it going to be a really hard problem because of the signal graph cycles that would exist? just curious#2022-01-1713:45wotbrewI didn't get around to it. Its certainly tricky, but I think something can be done in the future.#2022-01-1716:04robert-stuttafordi love that folks don't consider this to be a solved problem, and keep coming up with new and interesting approaches to solving it. nice work @U0GE2S1NH!#2022-01-1716:06wotbrewthe curse of lisp I guess 🙂#2022-01-1716:07robert-stuttafordyou say curse, i say creative playground -sung to the tune of tomato, tomahto-#2022-01-1819:00metasoarousNice work @U0GE2S1NH! Excited to see this!#2022-01-1819:14metasoarous@U02EMBDU2JU
> ...recursive queries aren’t implemented yet... is it going to be a really hard problem
The math does indeed get quite a bit trickier for this. The typical trick used in for resolving recursive queries (recursively evaluating a rule till you reach a fixed point) is more or less the same trick used to perform incremental view maintenance, so you have to generalize the iteration from a well-ordered set of indices to a partial order (in other words, you don't just iterate over either data-update or recursive-rule-update, you have to iterate over both at the same time). The solution is differential view maintenance (differential dataflow/datalog/computation, etc). Frank McSherry et al have worked this out: https://www.microsoft.com/en-us/research/wp-content/uploads/2013/01/differentialdataflow.pdf#2022-01-1819:14metasoarousThis one is better at explaining some of the background theory: https://users.soe.ucsc.edu/~abadi/Papers/differential_revision-app.pdf#2022-01-1819:15metasoarousVery interesting stuff, but also requires quite a bit of additional machinery.#2022-01-1819:37wotbrewI read some of those papers, my brain is a bit too smooth for all the math but I believe it can be done. In my head I see a specialised data flow node that closes over the fixed point recursion and intermediate indexes. You won't just be able to recur anywhere like a madman, I imagine some kind of CTE-ish syntax#2022-01-1819:39wotbrewThanks for the links again @U05100J3V, will review when it's time. Would be super happy to take notes / ideas in an issue too!#2022-01-1819:49metasoarousYeah; The background is super heady stuff. This post may be helpful, since it's a bit more pragmatic, and assumes the underlying diff-dataflow machinery: https://github.com/frankmcsherry/blog/blob/master/posts/2016-06-21.md#2022-01-1819:51metasoarousIt would be amazing if we had something akin to the timely-dataflow library; Then this wouldn't be too much work at all. But that's actually a tall order.#2022-01-1819:53metasoarousI'd recommend chatting with @U8YCZLZH6, who built clj-3df (https://github.com/sixthnormal/clj-3df). They left all the dataflow stuff to Rust/timely-dataflow, and wrapped as a clj api.#2022-01-1820:07wotbrewThanks so much! I hope once the dust has settled and I figure out how good an idea it actually is, to have another pass at the internals and align it with the best-of-breed approach from timely#2022-01-1814:30kipzalpine-version-clj 0.0.1 has just landed in Clojars. Use it to parse and compare alpine/gentoo package version strings: https://github.com/kipz/alpine-version-clj#2022-01-1815:33mhjortclj-gatling version 0.17.0 is out! This version finally adds support for rate based simulations. Big thanks https://github.com/dancmeyers for implementing this long awaited feature. clj-gatling is a load testing tool. Write tests in clojure, get results back as clojure data or as graphical Gatling html reports. Tests can be run by specifying a concurrency or then rate per second (the new feature). https://github.com/mhjort/clj-gatling#2022-01-1815:34mhjortAlso added new channel #clj-gatling#2022-01-1817:21danm🎉#2022-01-1906:13robert-stuttafordahhhh nice to see this still going, i had a great time with this a couple years back!#2022-01-1908:22steveb8nMe too. I've been using it to test #holy-lambda in AWS. Really helpful so 👃#2022-01-1920:08quollAnnouncing Remorse: a library for converting keywords into morse code.
This answers a suggestion by @lasse.olavi.maatta in response to @borkdude’s observation that ascii art is possible in keywords.
Thanks to @p-himik for the name.
https://github.com/quoll/remorse#2022-01-1920:09quollDespite @U064X3EF3’s admonitions, I refuse to have remorse for having created this#2022-01-1920:10fogus (Clojure Team)Feature request: emit keywords with the ascii codes for speaker beeps embedded in them#2022-01-1920:17slipsetVery disappointed in your naming skills. A var called a-z->morse which contains not only morse for a-z, but also for numbers and a limited set of punctuations.#2022-01-1920:18quollIt was originally only letters. I only learned for 0.0.2 that punctuation also existed!#2022-01-1920:18quoll@U050WRF8X, there’s \u0007. Are there any others?#2022-01-1920:19Alex Miller (Clojure team)seems like you changed horse midcourse without recourse#2022-01-1920:19Alex Miller (Clojure team)I'll see myself out#2022-01-1920:20quollWhat?!? There’s no :groan: emoji???#2022-01-1920:25R.A. PorterI feel like Alex telegraphed that joke.#2022-01-1920:28fogus (Clojure Team)@U051N6TTC I only know of (char 7) / \u0007#2022-01-1920:37quoll2 in a row might work for a dash. But I don’t know how to delay between successive dots and dashes#2022-01-1920:42fogus (Clojure Team)you could insert line-feeds -- the movement of the print head should be enough delay 😉#2022-01-1920:47quollOK… I now have a keyword: (def a (keyword "ab\u0007cd"))
Every time the keyword is printed it makes a sound. It’s freaking me out a little bit :rolling_on_the_floor_laughing:#2022-01-2000:26seancorfieldcom.github.seancorfield/expectations {:mvn/version "2.0.156"} -- a clojure.test-compatible version of the classic Expectations library -- https://cljdoc.org/d/com.github.seancorfield/expectations/2.0.156/doc/readme -- follow-up in #expectations#2022-01-2004:49pfeodrippeHi version a851bce2caf83906d2bf4d4b8143b96739c34c60 (git sha) of https://github.com/pfeodrippe/pitoco was added.
The ns pitoco.instrumentat was added, which allows you to infer schemas from your vars at runtime (using Malli + Spec Provider behind the scenes), it's
just a convenience for your REPL-driven development.
I've made a video testing the new feature with #cljdoc, you can see how it interacts with the REPL. See https://www.youtube.com/watch?v=MloJSCl38d0.
One low-hang fruit would be to auto-generate documentation, improving the review in a PR with schemas and even examples from the tests (it's always good to ease the life of our reviewers).#2022-01-2005:56ikitommiHi, please update the malli dep, with the new m/provider, it's 10-100x faster now. Cheers.#2022-01-2006:06metasoarousThis is amazing.#2022-01-2006:06metasoarousWould it be possible to run instrument, as you did, and cache a static view of the generated mali schema (perhaps when you call a particular function)?#2022-01-2012:02pfeodrippe@U055NJ5CC I have tried to use the new version and I was having some NPEs, this is why I'm still using spec provider. I will open an issue soon in the Malli repo o/#2022-01-2012:09pfeodrippe@U05100J3V Yes, it's possible, every var returned by infer-schemas will have a :malli/schema metadata associated, which you can read and output to a file (as Malli is serializable) or create some doc from it, do whatever you need. See the m/=> macro in https://github.com/metosin/malli/blob/master/docs/function-schemas.md.
Let me know your idea, we can add support right away in Pitoco if general enough o/#2022-01-2012:41Lukas Domagalareally cool idea to change the :doc meta. haven’t seen that done yet and it seems so obvious once you see it!#2022-01-2012:54pfeodrippeThanks, Lukas! It can be annoying if the schema is too long (but at least is at the bottom), it was the common denominator for inspection I have found which exists in our Clojure tooling#2022-01-2012:56Lukas DomagalaI feel your pain 🙂 thats why I’m currently working on a better way to provide that in calva. https://github.com/BetterThanTomorrow/calva/issues/1471
But as you said, it would be only one IDE.#2022-01-2116:06Lukas Domagala@U5R6XUARE not sure if you are interested, but the initial PR for that issue is out: https://github.com/BetterThanTomorrow/calva/pull/1492
Since you’d be one of the potential users for it I’d appreciate if you had a look.#2022-01-2116:42pfeodrippeThanks @U02EMBDU2JU! I will take a look, even I being a emacs user, it's good to know how the other tools are behaving so we can develop better developer tools o/#2022-01-2005:20tony.kayI’ve released 1.0.0-alpha8 of statecharts to Clojars.
https://github.com/fulcrologic/statecharts
I spent all day finishing up most of the missing bits. The library now supports a fully autonomous mode where statecharts can invoke other charts, multiple charts can be managed/started using a common env and can cross-communcate with events, etc. You can easily create new kinds of invocation processors, and the protocols make it relatively straight-forward to build distributed and long-running systems of state charts.
The library is very close to the SXCML standard in terms of features and uses the exact implementation of that standard for the chart processing.
There are new examples in the src/examples directory, and the documentation has been updated.
WARNING: this required a refactoring on several of the protocols, which resulted in BREAKING CHANGES (I said it was alpha). See the CHANGELOG for details. The chart definition API didn’t change, just some of the details of starting/running them.
This is probably the last alpha release, since the only major thing missing is a good rigorous bit of testing.#2022-01-2019:28ericdalloclojure-lsp Released https://clojure-lsp.io/ 2022.01.20-14.12.43 with a lot of new changes, check the gif for one of the exciting ones, you can now move coll entries via refactor commands with lsp without messing with your comments or brackets 🤯 🚀
Check #lsp channel for more information about all other new changes!#2022-01-2020:19quollIn case anyone didn’t understand that it was a joke last time, Remorse 0.1.0 has been released.
This version supports symbol conversion.
WARNING: Do not look at the code!
https://github.com/quoll/remorse#2022-01-2020:20quollHow did this project get 18 stars???#2022-01-2020:22Ben SlessBecause it's fun!#2022-01-2020:24Ben SlessIs this the first "obfuscated clojure" library?#2022-01-2020:28respatializedThere is also swearjure but it's a separate interpreter rather than self-bootstrapped:
https://github.com/hypirion/swearjure#2022-01-2020:29quollI remembered Swearjure as I was doing it#2022-01-2020:29quollI noticed that requiring the namepace was a little slow 🙂#2022-01-2020:32quollI’m particularly proud of the fact that it macros it’s way into having a standard ascii API. So all of the functions can be called normally:
string->morse
morse->string
keyword->morse
morse->keyword
symbol->morse
morse->symbol
#2022-01-2020:51lreadI dot dash was a joke! 🙂#2022-01-2021:10dpsutton-_...._.._...__.-.._.._-..._.-._.-_.-._-.--__.._...__.-_.--_._..._---_--_.__.-_-._-..__-.--_---_..-__.-_.-._.__.-_.--_._..._---_--_.#2022-01-2022:20emil0rBonus points for the name. Funny 😊#2022-01-2022:46quollThose points all go to @U2FRKM4TW. I renamed the project as soon as he suggested it#2022-01-2120:10Adam HelinsSome say it's a joke, I say it's beautiful!#2022-01-2120:18Ben SlessNext step is embedding a brainf* interpreter#2022-01-2021:29seancorfieldcom.github.seancorfield/honeysql {:mvn/version "2.2.858"} -- SQL as Clojure data structures -- https://cljdoc.org/d/com.github.seancorfield/honeysql/2.2.858/doc/readme -- follow-up in #honeysql
• Adds honey.sql/map= to convert a hash map into an equality condition (for a WHERE clause).
• Adds a :cache option to honey.sql/format to avoid re-parsing and re-generating complex SQL statements (Clojure only).
• Adds more support for Google BigQuery: SELECT * EXCEPT .. and SELECT * REPLACE .. and ARRAY<> and STRUCT<> column types.#2022-01-2021:47Andrey BogoyavlenskyI'm excited to announce https://github.com/abogoyavlensky/automigrate 0.1.0, the database auto-migration tool for Clojure!
If you would like to read more about it, please check the https://bogoyavlensky.com/blog/announcing-automigrate/, complete with an example and short description. 🙂#2022-01-2108:14Teemu KaukorantaAfter three years, a new release of ring-logger is here 😄
• Version 1.1.1 adds support for async ring handlers
• Adds :status-to-level-fn, which allows you to control the logging level of HTTP status codes in wrap-log-response
• Updates org.clojure/tools.logging dependency to version 1.2.3
https://github.com/nberger/ring-logger#2022-01-2113:59wilkerlucioPathom Viz 2022.1.21 is out! This release adds a long waited support for setting custom headers when setting up a connection via URL! It will also keep a record of the latest connections so you can reconnect with ease. Check it out at https://github.com/wilkerlucio/pathom-viz/releases/tag/v2022.1.21!#2022-01-2116:41markwI have just released a new update for cq (Clojure Query) - version 2022.01.21-16.20.00 , which adds XML support - and this is also my first time posting it on the Clojurians Slack.
cq is a Command-line Data Processor for EDN, YAML, JSON, XML and other data formats.
Essentially, it brings the joy of Clojure's threading macros to the command line.
It is inspired by jq and jet but aims to provide a bit more support for transforming deeply nested data structures.
https://github.com/markus-wa/cq#2022-01-2116:45borkdude@U0244CZ9LAF Awesome. I'll add you to the list of SCI projects here https://github.com/babashka/sci#2022-01-2116:49markwahh thanks! 😄 - yeah sci is such an amazing project, thanks a lot for building/maintaining it ❤️ - it really does all of the heavy lifting for cq! 🙂#2022-01-2117:18borkdude$ echo '[1 2 3]' | ./cq -i edn -- '->> (s/transform [s/ALL] inc)'
[2 3 4]
#2022-01-2117:18borkdudeit works :)#2022-01-2117:35markw🥳 - note that thread-last is actually the default 🙂 - so echo '[1 2 3]' | ./cq -i edn -- '(s/transform [s/ALL] inc)' works as well!#2022-01-2117:37borkdude@U0244CZ9LAF Is there a way I can just evaluate regular clojure without a threading macro? like
echo '[1 2 3]' | ./cq -i edn -- "(require '[com.rpl.specter :refer :all]) ..."
#2022-01-2117:39IvanI guess the -i input format matches the output. It would be interesting to have a -o option to define the output separately. So, read in a structure in the defined format, process it, and output as a potentially different format.#2022-01-2117:40markwin theory you can do
echo '[1 2 3]' | ./cq -i edn -- "#| (do (require '[com.rpl.specter :refer :all]) (identity .))"
but that gives Could not find namespace com.rpl.specter#2022-01-2117:40IvanI'm thinking of borkdude's question as whether it is possible to extend the operations possible on the data#2022-01-2117:40markw@U8ZE1VBSS actually the output always defaults to edn - I use it often to just convert from JSON to EDN by doing cat file | cq#2022-01-2117:43markwyou can define vars & functions like this - there might be a way to make this a bit nicer, but so far I haven't done this myself so I'm just thinking about it now
echo '[1 2 3]' | cq -i edn -- "#| (do (def x identity) (x .))"
if you have suggestions on what would be a good syntax let me know and I can try to see if we can make that work 😄#2022-01-2117:47markw@U04V15CAJ if I do {:namespaces {'s {...}}} in sci - I should be able to then (require '[s :refer :all]) - no? (currently getting Could not find namespace s)
If I can figure that out then it should be possible to do what you're looking for 🙂#2022-01-2118:24borkdudeI'll be back in 30 minutes to explain :)#2022-01-2118:39borkdude@U0244CZ9LAF So, this works:
echo '[1 2 3]' | ./cq -i edn -- "#| (do (require '[s :refer :all]) (ns-publics 's))"
#2022-01-2118:40borkdudebut it might be better to add the namespace com.rpl.specter and alias that as s in the user namespace#2022-01-2118:41borkdudeThere is also an :aliases {'s 'com.rpl.specter} option#2022-01-2118:58markwahh, amazing! thanks for elaborating 🙂 - I will try to make the required changes early next week!
I'm thinking I'll go with the aliases approach#2022-01-2615:38markw^ I've implemented the aliases solution now, thanks for the hint!#2022-01-2615:43borkdudesuper!#2022-02-0218:47jlmrReally enjoying cq so far, thanks for making this!#2022-02-0412:54markwglad to hear! @U56R03VNW 🙂#2022-01-2119:39hlshipio.github.hlship/test-pipeline. 0.1
test-pipeline is a small (very small!) library that can be used to improve your Clojure test suite, by breaking test code into composable, reusable steps.
https://github.com/hlship/test-pipeline#2022-01-2120:18Carsten Behringpppmap 1.0 was released
It is a small library which adds progress logging and partitions to map and pmap
In 1.0.0 the logging happens via tap> now
https://clojars.org/pppmap/versions/1.0.0#2022-01-2221:56uochanJust released antq ver 1.4.0, Tool to point out your outdated dependencies.
https://github.com/liquidz/antq
Added a option to download upgraded dependencies at the same time as a convenience.#2022-01-2316:03ikitommi[metosin/malli "0.8.0"] is out! #malli is a data-driven data specification library for Clojure/Script.
Changes since 0.7.0:
• Development-time tools work now with ClojureScript 🥳
• Clj-kondo can load user-defined malli type configs automatically
• ! defaults to use the pretty printer
• Support for Plumatic-style inline schema-definitions via malli.experimental/defn
• malli.destructure for parsing and unparsing Clojure (1.11) destructuring forms
• malli.destructure/infer to infer function schemas from Function Var arglists
• Expound-style pretty printing of validation errors via .pretty/explain
• malli.provider can infer :tuple, :map-of, :enum & any simple schema via transformers
• BREAKING: local registries are stored as identity, not as form
• New options to define transformers via schema properties
• Small fixes and improvements
Big thanks to all contributors, and to Clojurists Together for sponsoring the development.
https://github.com/metosin/malli#2022-01-2410:34souenzzowhat changed in 1.11 destructuing?#2022-01-2411:48ikitommithis one https://clojure.org/news/2021/03/18/apis-serving-people-and-programs#2022-01-2411:50ikitommiIn Malli, option to pass in map is basically [:alt [:map ..keys..] [:cat [:* ..kw-tuples..]]].#2022-01-2322:13djbluePortal https://github.com/djblue/portal/releases/tag/0.20.0 is now out! With this release, you can now specify a `:value` for portal to open. In the case of static data, portal behaves as it did previously. With atoms, it will automatically deref and update the UI when the atom changes. This new feature with the hiccup viewer make it very easy to throw together live development dashboards.
Also, special thanks to https://github.com/BrianChevalier for all the awesome contributions in this release!#2022-01-2322:15djblueIs an example of how I've been using the open feature to debug portal with portal 💯#2022-01-2322:16djblueAnd the https://github.com/djblue/portal/blob/master/dev/portal/setup.cljs#L38-L59 to do it is pretty minimal.#2022-01-2402:27Joshua Suskalocoffi v0.4.341 is out!
New in this version are extra functions and vars provided for high-performance (de)serialization when you know the exact types involved at development time, non-native byte orderings for primitive types, and a couple bug fixes for wrapper functions.
https://github.com/IGJoshua/coffi#2022-01-2416:04borkdudeEnjoyed the podcast as well.#2022-01-2417:00Joshua SuskaloThanks!#2022-01-2501:44Sam RitchieI’ve just released v0.21.0 of the #sicmutils computer algebra system! This release adds a fast, well-tested https://cljdoc.org/d/sicmutils/sicmutils/0.21.0/api/sicmutils.quaternion, many performance improvements and doubles down on transducer-compatible “functional folds”.
Highlights:
• Quaternion https://github.com/sicmutils/sicmutils/blob/main/src/sicmutils/quaternion.cljc and https://cljdoc.org/d/sicmutils/sicmutils/0.21.0/api/sicmutils.quaternion
• Many https://github.com/sicmutils/sicmutils/blob/main/src/sicmutils/special/factorial.cljc
• A https://github.com/sicmutils/sicmutils/blob/main/src/sicmutils/algebra/fold.cljc#L35, ie, transducer-compatible reducing functions, including folds for https://github.com/sicmutils/sicmutils/blob/main/src/sicmutils/polynomial/interpolate.cljc#L541, https://github.com/sicmutils/sicmutils/blob/main/src/sicmutils/rational_function/interpolate.cljc#L234 and https://github.com/sicmutils/sicmutils/blob/main/src/sicmutils/polynomial/richardson.cljc#L399
Sponsor link, if you want to support this work ❤️: https://github.com/sponsors/sritchie
Clojars: https://clojars.org/sicmutils/sicmutils
detailed release notes: https://github.com/sicmutils/sicmutils/releases/tag/v0.21.0
Cljdoc: https://cljdoc.org/d/sicmutils/sicmutils/0.21.0
Cheers!#2022-01-2515:04borkdudeBabashka 0.7.4 is now released 🎉 https://babashka.org/
Please leave some feedback in the survey if you are using it. https://forms.gle/ko3NjDg2SwXeEoNQ9
• Add new namespace from clojure 1.11: `clojure.math`
• Add new vars from clojure 1.11: `abs`, `iteration`
• Add compatibility with `org.clojure/algo.monads`
• SCI: support `:as-alias`
• SCI: add `pop!` (https://github.com/kbaba1001)
• deps.clj: update to clojure CLI 1.10.3.1058
• Add metabom jar to docker images https://github.com/babashka/babashka/issues/1133 (https://github.com/kipz, https://github.com/lispyclouds)
• Add opencontainers annotations to docker image https://github.com/babashka/babashka/issues/1134 (https://github.com/kipz, https://github.com/lispyclouds)
• Fix Alpine Linux Docker images in CI script https://github.com/babashka/babashka/issues/1140 (https://github.com/kipz, https://github.com/lispyclouds)
• babashka.fs: create dirs in `copy-tree` (https://github.com/duzunov)
• SCI: fix order of metadata evaluation (https://github.com/erdos)
• Fix: cannot take value of macro of `->`
• Fix https://github.com/babashka/babashka/issues/1144: cannot create multidimensional arrays
• Fix https://github.com/babashka/babashka/issues/1143: allow optional (ignored) `--` when using using `--main` (https://github.com/grzm)
• SCI: throw when `recur` is used from non-tail position
• Add more libraries to CI lib tests (https://github.com/cljwalker)
• Upgrade several built-in deps: `org.clojure/clojure`, `cheshire`, `core.async`, `test.check`#2022-01-2522:12plexusOrnament 0.3.30 is out. Ornament provides a syntax for writing "styled components" (Styles + Hiccup) in Clojure/ClojureScript. This release improves ClojureScript support, and has a significantly expanded README. https://github.com/lambdaisland/ornament#2022-01-2620:39Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.10.3.1069 is now available (just a maintenance release, nothing interesting):
• Update some Maven transitive deps to address some CVEs
• Update to tools.tools v0.2.5
• Add check to error on invocation of multiple exec functions
• Use tools.deps.alpha 0.12.1120
#2022-01-2716:52mkvlrWe’ve just released io.github.nextjournal/clerk {:mvn/version "0.5.346"} on Clojars. It’s a BIG update. Highlights are various improvements to the viewer api:
• 🏞️ https://snapshots.nextjournal.com/clerk-demo/build/bd74d652a8dddbdddb42b62fe8043cf1f4b4e65d/notebooks/images.html for `java.awt.image.BufferedImage` with automatic layouting.
• 🪆 https://snapshots.nextjournal.com/clerk/build/b9f35eb58a32f9b13d50d74143b9e2418dd2d1db/index.html#/notebooks/viewers_nested.clj inside e.g. `html` or `table` viewers.
• 🤕 https://snapshots.nextjournal.com/clerk/build/cddd487c37b26e872b1a56bb2a0959b05cbfc0b0/index.html#/notebooks/viewer_api_meta.clj. Clerk’s viewer api has been based on functions that modify the result. This can be undesired if you want to depend on the unmodified value downstream. You can now alternatively use metadata using the `:nextjournal.clerk/viewer` to convey the viewer. Valid values are viewer functions or keywords. The latter is useful when you don’t want a runtime dependency on Clerk.
• 🎰 https://github.com/nextjournal/clerk/commit/567bf29908d83490b823f0c4d87ebb3bd0837508 to semantically limit how much data is sent to the browser.
There’s a lot more in the https://github.com/nextjournal/clerk/blob/main/CHANGELOG.md#05346-2022-01-27. Follow-up in #nextjournal#2022-01-2803:41wilkerlucioPathom 3 2022.01.28-alpha is out, this release includes:
• Improve optimization for single item branch, now support moving run-next to the child's edge
• On union process, in case the item doesn't match any branch its turned into nil (and removed in case of union sequences)
• Fix bug when checking for entity required data, OR cases could trigger a false positive#2022-01-2817:00Jakub Holý (HolyJak)https://github.com/holyjak/clj-tumblr-summarizer v1 adds the ability to create monthly summaries of the backed up posts in HTML, e.g. to posts on a blog.
clj-tumblr-summarizer is a tool / library that progressively backs up posts from a http://Tumblr.com micro-blog and can produce monthly summaries of the published posts in HTML. Can be run as a scheduled GitHub Action.#2022-01-2817:43Joshua Suskaloawesome, now I can consume more pukicho content and get the fuzzy feeling of running clojure to do it#2022-01-2822:25plexuslambdaisland/uri 1.13.95 is out, which fixes a potential stack overflow when normalizing URLs with very large query params. lambdaisland/uri is a cross-platform idiomatic URI library https://github.com/lambdaisland/uri#2022-01-2920:58nnicholshttps://github.com/nnichols/clojure-dependency-update-action is now ready for use on GitHub!
This GitHub action uses antq to check for outdated dependencies and updates them for you.
Updates include:
• Fixes for multi-directory projects/monorepos
• Commit messages for dependency updates now link to the GitHub diff between the old and new version (Thanks to some awesome new functionality in antq)
• Support for most modern clojure dependency files (deps.edn, project.clj, shadow-cljs.edn, pom.xml)
The last note leads to a secondary announcement: nnichols/leiningen-dependency-update-action is now slated for deprecation, since both actions shared an identical API and the first now also handles Leiningen projects. It will stay online in its current state to prevent anyone’s pipelines from breaking, but I do highly recommend upgrading since it only requires a simple substitution.#2022-01-2921:19nnicholsIf you’re reviewing you Clojure pipelines on GitHub, you may also be interested in https://github.com/nnichols/clojure-lint-action
The above runs clj-kondo for you and pipes the results through ReviewDog to create PR comments for linter findings#2022-02-0213:58plexusdo you have any examples of what a PR looks like created by this action?#2022-02-0215:02nnichols@U07FP7QJ0 - The clojure-lsp project uses this action, and it opened a PR this morning: https://github.com/clojure-lsp/clojure-lsp/pull/743#2022-02-0216:27plexusSeems it adds a bunch of extra newlines to the pom.xml 🙈 tools-deps used to have a similar problem but they fixed it quite some time ago IIRC#2022-02-0217:13nnicholsAntq performs the actual update, so I can check to see how the edits are performed. It may be the same root cause#2022-01-2921:45mike_ananevA new version of the library project template is out. This version uses deps-new, build-clj instead of clj-new and depstar
https://github.com/redstarssystems/libtemplate#2022-01-3113:16flowthingA new version (v0.12.0, still alpha) of Tutkain, a Sublime Text package for interactive Clojure development, is out.
Note that this version removes all default key bindings, including indentation on Enter and the small number of ParEdit key bindings Tutkain had enabled by default. For instructions on how to restore those key bindings, see here:
https://github.com/eerohele/Tutkain/blob/3412f53c077afb511f39574cbc95f9a323b59fec/messages/0.12.0.txt#L21-L185
Other than that, some highlights:
• Support for using a panel instead of a view for REPL output
• Panels hide when you press Escape and show up when you evaluate something, so they're useful especially when working on a laptop screen
• If you like using inline evaluation results, you might prefer a panel over a regular view
• Support for copying evaluation results to clipboard
• Support for connecting to a Clojure runtime without spinning up a separate socket channel for editor tooling messages
• Pass backchannel: false to tutkain_connect to use
• Useful when one socket connection is all you can get (e.g. when connecting over an SSH tunnel)
Full changelog: https://github.com/eerohele/Tutkain/blob/master/CHANGELOG.md#0120-alpha---2022-01-30
Documentation: https://tutkain.flowthing.me
Follow up in #tutkain (or via GitHub issues).#2022-02-0108:39serefayarANN: ayatori is an experimental LRA Coordinator (a.k.a saga coordinator) to manage distributed transactions across microservices. It tries to follow (not completely) Eclipse Microprofile LRA Spec. It's not released and it's not ready for production usage, yet. (developing just for fun)
https://github.com/serefayar/ayatori#2022-02-0109:35vlaaadNew release of reveal Reveal is out!
https://vlaaad.github.io/reveal/ 1.3.265 now provides a built in Vega view. Reveal Pro 1.3.330 adds Vega Forms that allow creating Vega(-Lite) visualizations and learn Vega language in a helpful interactive UI.
Follow up in the thread here or in #reveal channel.#2022-02-0109:36vlaaadI also wrote a post in my blog about it — https://vlaaad.github.io/reveal-vega-and-data-dsls#2022-02-0214:51oliyHi everyone, martian 0.1.20 has been released.
martian is a library providing abstraction over your http client, supporting Swagger, OpenAPI and your own custom definitions.
https://github.com/oliyh/martian
This release adds support for:
• martian-cljs-http-promise - support for the https://github.com/oliyh/cljs-http-promise http client for cljs
• Specifying options for the Swagger GET request when bootstrapping, https://github.com/oliyh/martian/pull/123 thanks https://github.com/AndreaCrotti
This release fixes:
• Bump cheshire and fix jackson https://github.com/advisories/GHSA-xmc8-26q4-qjhx, https://github.com/oliyh/martian/pull/127 thanks https://github.com/RickMoynihan
#2022-02-0218:24bederswhat a coincidence. Was looking for this library and couldn't recall the name...something with m.....;)#2022-02-0215:45pezHere's a project repository meant to lure you into the rewarding world of Clojure prime sieving. Will we meet down the rabbit hole?
https://github.com/PEZ/on-the-code-again-eratosthenes#2022-02-0218:17Alex Miller (Clojure team)Created #transit for discussion of the transit format and its implementations...#2022-02-0219:48borkdudepod-babashka-buddy: a babashka pod around the buddy library v0.1.0 - this allows you to use the buddy library directly from #babashka scripts.
https://github.com/babashka/pod-babashka-buddy
This is the first update since a little over a year. A lot more namespace were exposed now, with the help with @cap10morgan.
An example:
(require '[babashka.pods :as pods])
(pods/load-pod 'org.babashka/buddy "0.1.0")
(require '[pod.babashka.buddy.core.hash :as hash])
(hash/md5 "foo")
Check https://github.com/babashka/pod-registry for other available pods.#2022-02-0221:34Alex Miller (Clojure team)https://clojure.org/releases/devchangelog#v1.11.0-beta1 is now available
• https://clojure.atlassian.net/browse/CLJ-2690 Improve iteration docstring and arg names
• https://clojure.atlassian.net/browse/CLJ-2689 Fix clojure.math tests to be more tolerant of floating point comparisons
• https://clojure.atlassian.net/browse/CLJ-2685 Fix iteration generative test failure
• https://clojure.atlassian.net/browse/CLJ-2529 Fix incorrect reporting of runtime errors as compiler errors in calls through Compiler.load()
• https://clojure.atlassian.net/browse/CLJ-2620 Fix asymmetric handling of :exception :vals in prepl
• https://clojure.atlassian.net/browse/CLJ-1180 Fix resolution of class type hints in defprotocol
• https://clojure.atlassian.net/browse/CLJ-1973 Make order of emitted protocol methods in generated classes reproducible
• Rolled back prior change for https://clojure.atlassian.net/browse/CLJ-2493
• https://clojure.atlassian.net/browse/CLJ-2493 clojure.java.browse - Fix browse-url hanging on call to xdg-open (new change is more targeted and addresses more cases)
As usual, we request your help in getting feedback about this release! If you run your test suite with it, please tag this post with ✅ or ❌ and leave feedback if the latter.#2022-02-0222:08borkdudeFWIW, all bb tests are passing with beta1 and you can get it with:
$ bash <(curl ) --version 0.7.5-SNAPSHOT --dir .
$ ./bb doc iteration
-------------------------
clojure.core/iteration
([step & {:keys [somef vf kf initk], :or {vf identity, kf identity, somef some?, initk nil}}])
...#2022-02-0222:11dpsuttonSuccessful test run. Warnings about:
• abs: java-time, clojure.math.numeric-tower,medley, taoensso.encore, kixi.stats.match
• update-keys & vals: clojure.tools.analyzer.utils, clojure.tools.analyzer, clojure.tools.analyzer.passes.uniquify
(just providing information about warnings we got in case those libs need to be patched.)#2022-02-0222:11Alex Miller (Clojure team)there is a new version of numeric-tower out there with that warning fixed (0.0.5) - but really you should be substantially better off not using numeric-tower for this#2022-02-0222:11Alex Miller (Clojure team)and ditto tools.analyzer in 1.1.0#2022-02-0223:33seancorfieldOur test suite passes with Beta 1 -- so no regressions from Alpha 4 (which we have in production). Beta 1 will go into production whenever our next production build happens.#2022-02-0308:56brendnzThe new CLJ-2493 works for me! Thankyou @U050WRF8X, @U064X3EF3, and @U04V70XH6.
{:tag :a, :attrs {:href "/cdn-cgi/l/email-protection", :class "__cf_email__", :data-cfemail "abc9d9cec5cfc5d1ebf8ded9cdcac8cee9c4c4c0"}, :content ("[email protected]")}
Downloading: org/clojure/clojure/1.11.0-beta1/clojure-1.11.0-beta1.pom from central
Downloading: org/clojure/clojure/1.11.0-beta1/clojure-1.11.0-beta1.jar from central
Clojure 1.11.0-beta1
user=>
{:tag :a, :attrs {:href "/cdn-cgi/l/email-protection", :class "__cf_email__", :data-cfemail "94f6e6f1faf0faeed4c7e1e6f2f5f7f1d6fbfbff"}, :content ("[email protected]")}
ClojureScript 1.10.844
cljs.user=> (+ 1 1)
2
cljs.user=> (js/alert "hi")
nil
cljs.user=>#2022-02-0309:24Matthew Davidson (kingmob)I think the iteration docstring could be further improved. If k is not a key but a “token”, why not use names like tokf and init-tok? The use of k for something that’s not a key seems non-idiomatic.#2022-02-0309:25brendnz@U0ETXRFEW, I note only for completeness, for an Ubuntu on WSL system like mine, the browser still needs to be open before running "Fire up the ClojureScript Quick Start Browser REPL", but that is no problem, at least for a user on that system who knows to have a browser open beforehand.
Edit: Um, it seemed ok to continue my comment on CLJ-2493 here, but sorry, I now think not.#2022-02-0311:54EugenDoes https://clojure.atlassian.net/browse/CLJ-1973 help with Debian reproducible builds of Clojure ?#2022-02-0313:31Alex Miller (Clojure team)Possibly, but that was not tested#2022-02-0221:59Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.10.3.1075 is now available
• https://clojure.atlassian.net/browse/TDEPS-216 - Built-in :deps alias should remove project paths from classpath
• Improve error if git sha is not found in git repo
• Improve prep error if transtive dep’s prep function is unresolvable
• Bump AWS deps to latest versions
• Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.12.1135#2022-02-0307:20seancorfield@U064X3EF3 I updated to 1.10.3.1075 and I'm not sure that TDEPS-216 was included? I looked in the brew-install project and didn't see any relevant update (the root deps.edn file does not have this change). I do see it in tools.deps.alpha so I guess it is included but now the root deps.edn file in brew-install doesn't match the resource in t.d.a?#2022-02-0307:23seancorfieldThe confusion:
(! 514)-> clojure -Sdescribe
{:version "1.10.3.1075"
:config-files ["/usr/local/Cellar/
No :replace-paths [] in there.#2022-02-0314:24imreNot sure how it's set up but the case I reported for TDEPS-216 works now#2022-02-0314:24imrehttps://clojurians.slack.com/archives/C6QH853H8/p1643624068729959#2022-02-0314:26imre; clojure -Srepro -version
Clojure CLI version 1.10.3.1075
; echo '{:paths ["src"] :deps{org.clojure/java.classpath {:mvn/version "1.0.0"}}}' > deps.edn
; mkdir src && echo '(ns user (:require clojure.java.classpath))' > src/user.clj
; clojure -Srepro -X:deps list :license :none
org.clojure/clojure 1.10.3
org.clojure/core.specs.alpha 0.2.56
org.clojure/java.classpath 1.0.0
org.clojure/spec.alpha 0.2.194#2022-02-0314:26imreThanks for the fix @U064X3EF3#2022-02-0314:30Alex Miller (Clojure team)@U04V70XH6 I can update that one too but it's not used anymore, it's just there for any legacy tools that pulled it explicitly. the root deps.edn is used as a resource from the tools.deps lib#2022-02-0314:38Alex Miller (Clojure team)maybe I should just extract the resource so there's no "copy" there#2022-02-0222:34miltHey folks! Yet is doing some SSO-related work and we’ve just released two small libs for use with OpenID Connect and (certain) Clojure(Script) stacks:
• https://github.com/yetanalytics/re-oidc 0.0.1 - A re-frame wrapper for https://github.com/IdentityModel/oidc-client-js
• https://github.com/yetanalytics/pedestal-oidc 0.0.2 - Pedestal interceptor + utils for handling OIDC tokens & discovery
re-oidc contains an https://github.com/yetanalytics/re-oidc/blob/main/README.md#interactive-development--demo where you can spin up a Keycloak instance, API server and Figwheel front-end to see it all working in concert.#2022-02-0315:39AkizHi everyone, I am not sure if this is the right place. But I’ve released a tool for moving data from Google Bigquery to Postgresql. You may find this useful for controlling your cost or just local development. Really niche 🙂
https://github.com/zikajk/bq2pg#2022-02-0315:41lukaszhuh, I need something like this :-)#2022-02-0315:43Akiz@U0JEFEZH6 Great, if you miss / dont understand something, please ask. It is still rough (but battle-tested) 🙂#2022-02-0315:45lukaszI'll bookmark it for sure, at some point my team will have to move off BigQuery so this will help us a lot (not my choice, I'd keep using it)#2022-02-0318:22Scott GriffinAs a fellow Clojure/ClojureScript developer and software engineer, I thought some of you might be interested to hear of an app I and my friend recently built and released.
“Recap: Catch Every Word” makes it easy to do voice/speech recognition and transcribe audio content from over 70 different languages and dialects. It's great for podcasts and interviews, and if you know a second language from time spent in another country or multi-lingual education, and you have audio recordings in that language, more likely than not Recap can support transcribing that audio content and even produce closed captions for uploading into videos.
The api endpoints were written entirely in ClojureScript, and compiled with shadow-cljs.
Many thanks to @foo and @thheller for their helpful tips on interop and shadow-cljs setup.
Check it out on the iOS App Store at https://apps.apple.com/us/app/recap-catch-every-word/id1592617977 and on the Google Play Store at https://play.google.com/store/apps/details?id=com.griffinscribe.recap
The app is still in its early stages, so any feedback or feature enhancement requests or bug reports through the app interface would be helpful.#2022-02-0321:31pabloreGreat work! I love to see success stories with clojure and firebase#2022-02-0323:42phronmophobicViscous: pprint that respects your space and time
code: https://github.com/phronmophobic/viscous
try it: https://phronmophobic.github.io/viscous/#2022-02-0409:43Adam HelinsLooks interesting, I've been looking for an online EDN explorer#2022-02-0412:32oxalorg (Mitesh)We've cut a small new release of Kaocha, which fixes --watch on latest OSX / ARM machines 🎉.
• https://github.com/lambdaisland/kaocha/pull/268 Changed default watcher to "Beholder" (https://github.com/nextjournal/beholder) which supports OSX/m1 machines natively. Hawk is now deprecated and will be removed in a future release.
• For those who still want to use Hawk for some reason, added a configuration :kaocha.watch/type which takes either :beholder or :hawk as values. Defaulting to :beholder as the new fs watcher.
◦ If you are ^this, then please message me or in #kaocha on the use case which still requires hawk
• https://github.com/lambdaisland/kaocha/pull/269 Add --no-fail-fast CLI option [thanks to @jshaffer2112]
https://github.com/lambdaisland/kaocha#2022-02-0414:45Lucy WangAnnounce shadow-test-utils , which provides some goodies when writing tests in shadow-cljs:
1. A prettified browser test reporter
2. A way to only run (or exclude) tests like kaocha
https://github.com/lucywang000/shadow-test-utils/#2022-02-0414:49p-himikLooks nice!
Curious - why does it need to be included before shadow-cljs? If I'm not mistaken, overriding namespaces works only if your override is later on the classpath than what you're overriding.#2022-02-0510:28Lucy Wangemm, I think the rule of classpath resolution is the first one is being used. I'll double check it anyway, thanks!#2022-02-0510:35p-himikOh, you're right! And now I wonder how on Earth have I never been bitten by it.#2022-02-0420:11Alex Miller (Clojure team)https://github.com/cognitect/transit-java 1.0.362 is now available (https://github.com/cognitect/transit-java/blob/master/CHANGES.md#10362--2022-02-04)#2022-02-0420:12Alex Miller (Clojure team)https://github.com/cognitect/transit-clj 1.0.329 is now available (https://github.com/cognitect/transit-clj/blob/master/CHANGES.md#10329--2022-02-04)#2022-02-0518:36mike_ananevInitial release for Application project template. This version migrated to `deps-new`, `build-clj` .
All workflow is based on babashka .
This template will give you the following basic project workflow:
{:tag :a, :attrs {:href "/cdn-cgi/l/email-protection", :class "__cf_email__", :data-cfemail "97fafefcf2d7faf5e7a7a5"}, :content ("[email protected]")}
https://github.com/redstarssystems/apptemplate#2022-02-0712:36pfeodrippeIf you have been using https://github.com/pfeodrippe/pitoco to infer Malli schemas for your Clojure code, a complementary tool was released, https://marketplace.visualstudio.com/items?itemName=feodrippe.pitoco-extension&ssr=false#overview (https://github.com/pfeodrippe/pitoco-vscode-extension).
This extension leverages information that you produced when inferred the schemas, allowing you to visualize data at your VSCode environment. It works with the web version of VSCode (https://vscode.dev), the main use case is that you have committed Pitoco schema files generated by pitoco.instrument/store-instrumented-vars! (locally or from your CI) and, for example, when you are reviewing a PR, you press . and then you can hover over your var anywhere and have schema + examples right away without the need to specify any of them beforehand, everything is collected from runtime.
It's simple and rough right now, but take a look, report an issue, open a PR o/
See a short video about it at https://www.youtube.com/watch?v=H1An2edqiJk.#2022-02-0712:42borkdude@U5R6XUARE That's awesome! I've been thinking about something like this for clj-kondo as well. It could generate an HTML view or overlay for code with references to other vars, etc.#2022-02-0712:42borkdudeSimilar to how github has some navigation features for some popular languages, but unfortunately not clojure#2022-02-0712:47pfeodrippeYes, exactly!! I was thinking in creating some web view first, but hover was simpler.
Clj-kondo could benefit a lot from it, I like the idea!!
The extension is made in cljs, I have missed the REPL ahahaha#2022-02-0712:48borkdudeI mean, the clj-kondo analysis can be exported to JSON and then be shown in this JS extension or so#2022-02-0712:51borkdudeI have asked Github on Twitter once if they would support something like this for their UI: just some files in the repo with information about the code which can be used by their navigation,etc feature#2022-02-0712:51borkdudeBut they were adamant that everything was implemented in terms of treesitter#2022-02-0712:52pfeodrippeYes yes, it would be great!
One issue I was having is where to store this information, at the moment it reads locally from a committed file, but I am thinking in adding supported for S3 so people can have their commits clean (no generated file with megabytes of information committed).#2022-02-0712:52borkdudeyeah, s3 or google cloud#2022-02-0712:52borkdudewhatever, could be configurable as long as you have a URL with a file to download#2022-02-0712:53pfeodrippeYes!#2022-02-0714:41ikitomminice! Malli itself can do some basic inferring of schemas based on malli schemas or arglists. Maybe that could be plugged in too?
(defn kikka
([a] [a])
([a b & cs] [a b cs]))
(md/infer #'kikka)
;[:function
; [:=> [:cat :any] :any]
; [:=> [:cat :any :any [:* :any]] :any]]
#2022-02-0714:41ikitommi(mx/defn kukka :- [:vector :int]
([a :- :int] [a])
([a :- :int, b :- :int, & cs :- [:* :int]] [a b cs]))
(md/infer #'kukka)
;[:function
; [:=> [:cat :int] [:vector :int]]
; [:=> [:cat :int :int [:* :int]] [:vector :int]]]
#2022-02-0714:47pfeodrippeYes, I'm using the wonderful malli.destructure ns in the extension, it works pretty well :)#2022-02-0715:07ikitommioh, didn’t notice, cool 😎#2022-02-0806:16robert-stuttafordliving in the future!#2022-02-0718:18mauricio.szaboHi folks!
One day I found out a tool that converts JS to ClojureScript, but unfortunately it didn't support most of JS features. I decided to hack on it, found out that it was written in JS, could not find my way around the code, so I decided to do a rewrite: https://gitlab.com/mauricioszabo/js2cljs
This is the live version: https://mauricioszabo.gitlab.io/js2cljs/#2022-02-0718:18mauricio.szaboBTW, I accept help from people that know more about UI design to make it better :rolling_on_the_floor_laughing:#2022-02-0718:21kipzCool! Why do you need this out of interest? To be nice to your eyes when reading JS?#2022-02-0719:04Aleedi was looking for something like this when reading js documentation that I wanted to copy to cljs. so good to know it exists
the specific case was copying jsx logic to cljs, which may be more difficult to support given various ways it could be written 😅#2022-02-0719:13borkdudeImpressive!#2022-02-0719:14borkdude@U3Y18N0UC I tried what it would make for class Foo {}
(modern/defclass Foo (constructor [this]))
#2022-02-0719:15mauricio.szaboYeah, that's the [shadow.cljs.modern :as modern] require that I'm not importing yet 😅#2022-02-0719:16mauricio.szabo@UPH6EL9DH the problem with JSX is that it's not really Javascript, so... you need to Babel first 😞#2022-02-0719:24borkdudeyou can find online JSX translators as well, but I would find that a nice bonus for the online version#2022-02-0719:25borkdudeJSX -> Reagent#2022-02-0719:34mauricio.szaboYeah, I intend to add some configs in the future, like, "convert all objects to CLJS" (right now it tries to keep JS structures intact for example)#2022-02-0719:34mauricio.szaboThat's why JS destructuring becomes so weird 😄#2022-02-0719:35borkdudeI've actually pondered if I should support some kind of JS like language for babashka for people who want to use the libraries/Java classes, but can't write Clojure. So far the answer has been no every time, but with this as front-end, it could be fun ;)#2022-02-0719:37borkdudeBut I guess you would soon run into issues like Thread.sleep(1000) -> (Thread/sleep 1000) vs (.sleep Thread 1000)#2022-02-0720:31Aleedwhat’s a use case for people who know only JS wanting to use Java classes?#2022-02-0720:35borkdudeJS/Java-ish syntax may be more familiar to them#2022-02-0723:57mauricio.szaboBTW, thanks for multiple comments, I found and fixed some bugs :D#2022-02-0809:35slipsetIt would be really handy for me if we could make it work both ways, as a Clojurist dabbling in JS from time to time 🙂#2022-02-0810:00borkdude@U04V5VAUN CLJS already translates clojure into JS ;)#2022-02-0819:34eccentric JThis is awesome!#2022-02-1009:11Chris McCormick@U04V5VAUN you might be interested in https://github.com/wisp-lang/wisp which outputs JS from clojure-like lisp.#2022-02-1017:44AkizCool!
This is probably outside of the scope but this
String(count) + " times"
is formated as
(+ (String count) " times")
It would be nice to get
(str count " times")
#2022-02-0811:01oliyHi all, I'm pleased to announce the 0.1.17 release of re-graph
re-graph is a GraphQL client for Clojure and ClojureScript with bindings for re-frame applications.
https://github.com/oliyh/re-graph
This release improves:
• updated all dependencies, should now work with clj-http 3.10+
• updated logging to remove js compiler warnings
#2022-02-0811:06wotbrewhttps://github.com/wotbrew/relic 0.1.5 has been just been cut
• joins can now use more kinds of index.
• changed :agg behaviour over all rows in empty collections to enable more kinds of constraint.
There has also been bug fixes and other minor improvements since the initial release a few weeks ago, see https://github.com/wotbrew/relic/blob/master/CHANGELOG.md.
Oh and if you didn't see there is also https://github.com/wotbrew/relic/tree/master/dev/examples/cljidle made with relic as dog-food that demonstrates a basic reagent integration.
Chat in #relic.#2022-02-0811:11wotbrewWas going to post in #releases as 'quite boring', but I realised cljidle might ruin productivity for a few folks.#2022-02-0811:38mynomotoMine is ruined 👏#2022-02-0813:05robert-stuttafordit's still a regular topic in our slack haha#2022-02-0813:11mynomotoThis shoud be posted on #clojure-gamedev, I can spend the whole day clicking as it is now but imagine adding keyboard clicking sounds and adding extra monitors on the workstation 😂#2022-02-0813:21wotbrewI mean its just a joke and took like 2 hours, but I think I should make a version 2. All good idle games need a transcendence mechanic...#2022-02-0813:03IvoDhttps://flexiana.com/2022/02/investigating-clojures-transducer-composition#2022-02-0813:05otfromIs this more of a #news-and-articles thing?#2022-02-0813:06flowthingIt is, and it was already posted there earlier.#2022-02-0814:17martinklepsch@U02A1N29GSH Please don’t post blog posts like this one in #announcements. I’ll leave it here for now but consider this a warning. Announcements is for announcements only, as per channel description.#2022-02-0814:24IvoDSure, apologies.#2022-02-0815:56seancorfieldIn going to delete it from here now that @U02A1N29GSH has responded because I don't want the presence of this to encourage others to post blog posts etc.#2022-02-0816:33IvoDFair enough.#2022-02-0909:22borkdudeSCI v0.2.9: Clojure/Script interpreter used in #babashka, #nbb, #obb, scittle, #clj-kondo, #jet and various other projects.
https://github.com/babashka/sci/blob/master/CHANGELOG.md#v029#2022-02-0920:46borkdudeclj-kondo, a linter for clojure (code) that sparks joy, v2022.02.09 ✨ clj-kondo
2022.02.09.
• Feature https://github.com/clj-kondo/clj-kondo/issues/1549: detect and warn on cyclic task dependencies in bb.edn (https://github.com/mknoszlig)
• Feature https://github.com/clj-kondo/clj-kondo/issues/1547: catch tasks undefined tasks present in `:depends`. (https://github.com/mknoszlig)
• Feature https://github.com/clj-kondo/clj-kondo/issues/783: `:keys` can be used in `:ret` position, also fixes types return map call as input for another typed map function. (https://github.com/pfeodrippe)
• Feature https://github.com/clj-kondo/clj-kondo/issues/1526: detect redundant fn wrappers, like `#(inc %)`. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#redundant-fn-wrapper. This linter is :off by default, but may be enabled by default in future versions after more testing.
• Feature https://github.com/clj-kondo/clj-kondo/issues/1560: lint task definition keys in bb.edn (https://github.com/mknoszlig)
• Feature https://github.com/clj-kondo/clj-kondo/issues/1484: Add analysis information about protocol implementations. (https://github.com/ericdallo)
• Fix https://github.com/clj-kondo/clj-kondo/issues/1563: vector inside list should not be linted as function call when inside tagged literal.
• Fix https://github.com/clj-kondo/clj-kondo/issues/1540: imported class flagged as unused when it only appears in annotation metadata.
• Fix https://github.com/clj-kondo/clj-kondo/issues/1571: ignore spliced reader conditionals wrt. namespace sorting.
• Fix https://github.com/clj-kondo/clj-kondo/issues/1574: def usage context contains reference of the re-frame reg-sub it is used in. (https://github.com/benedekfazekas)
Join #clj-kondo for more info.#2022-02-0922:27borkdudeSee the new :redundant-fn-wrapper linter in action:
https://github.com/clj-commons/rewrite-clj/commit/d9eda955f09d09fd1246244ce9d8a4ec5b247ea8#2022-02-1002:00Matheus Bernardeshttps://github.com/clj-holmes/clj-watson
clj-watson v1
It's a software composition analysis (SCA) tool that focus in finding and remediate vulnerable direct and transitive dependencies.#2022-02-1014:10Alex Miller (Clojure team)After reading the readme, I still have no idea what this actually does#2022-02-1014:11Alex Miller (Clojure team)vulnerable ... to what? remediate .... how?#2022-02-1015:17Matheus Bernardeshttps://github.com/clj-holmes/clj-watson/pull/2 reviewplease#2022-02-1015:20Alex Miller (Clojure team)thanks!#2022-02-1021:21uochanJust released antq ver 1.5.0, Tool to point out your outdated dependencies.
https://github.com/liquidz/antq
Added a option to ignore versions installed to the local Maven repository.#2022-02-1215:36niwinzJust released funcool/promesa v6.1.434 that comes with -> , ->> and as-> threading macros, variants of the same macros from clojure.core that works with promises.
https://github.com/funcool/promesa#2022-02-1218:57borkdude@U06B73YQJ Thanks for promesa, it's probably the most important built-in library in #nbb for dealing with JS promises#2022-02-1219:13niwinzglad to hear it, and glad it is useful 😄#2022-02-1421:30eccentric Jhttps://github.com/athos/kitchen-async that's been my goto promise library for a few years. Any thoughts on key differences?#2022-02-1421:37borkdudeWhat I like about promesa is that it is very light weight, no external dependencies, just makes it more convenient to work with JS native promises and that's it. No extra baggage and results in small bundle size.#2022-02-1506:26eccentric JThat's fair but unless I'm mistaken, kitchen async also has no external deps#2022-02-1507:02borkdudeI saw it has a dep on core async but I don't know if it's really used #2022-02-1518:27eccentric JAh you're right. Looks like it has a specific from channel to promise API https://github.com/athos/kitchen-async/blob/master/src/kitchen_async/promise/from_channel.cljs which satisfies my question 😛#2022-02-1218:34phronmophobicSnowball: Tool for inspecting the sizes of your dependencies
https://github.com/phronmophobic/snowball
Supports 3 views: interactive treemap, static image treemap, terminal table#2022-02-1218:39Alex Miller (Clojure team)nice!#2022-02-1218:55Ben SlessYou could easily make a treemap du out of it, too#2022-02-1218:58phronmophobic@UK0810AQ2, I thought that's what I was doing.#2022-02-1219:07phronmophobicOh, I think I misunderstood your suggestion. You mean make a version that is given a local directory and spits out a tree map? #2022-02-1219:20Ben SlessExactly! You could probably add it with a tiny change#2022-02-1219:21Ben SlessMaybe even extract the treemap to its own library for visualization components :thinking_face:#2022-02-1219:23phronmophobichttps://github.com/phronmophobic/treemap-clj 😄#2022-02-1219:25Ben SlessOh, carry on, then 😄#2022-02-1301:41Lukas Domagala@U7RJTCH6J I really like your treemap https://blog.phronemophobic.com/treemap/treemaps-are-awesome.html!#2022-02-1320:04jumarIs there a way to run this on a lein project? I guess no?#2022-02-1320:24phronmophobic@U06BE1L6T, not directly, but it will work with mvn deps. So the workaround is something like:
$ lein install
Created /Users/adrian/workspace/membrane-re-frame-example/target/membrane-re-frame-example-0.1.0-SNAPSHOT.jar
Wrote /Users/adrian/workspace/membrane-re-frame-example/pom.xml
Installed jar and pom into local repo.
$ clojure -X:snowball :lib membrane-re-frame-example :mvn/version '"0.1.0-SNAPSHOT"'
#2022-02-1320:31jumarAh, I see. I in fact tried it on one of our private repos/libs but got an error due to, I suppose, snowball not able to resolve dependencies stored in a private maven repo.#2022-02-1320:35phronmophobicIt requires knowing how the clojure deps.edn works, but you could make a small deps.edn file like:
{:deps
{my/library {:mvn/version "0.1.2"}}
:mvn/repos
{"my-private-repo" {:url ""}}}
and then run
clojure -X:snowball :deps deps.edn
or pass it all on the command line:
clojure -Sdeps '{:mvn/repos {"central" {:url ""}}}' -X:snowball :lib membrane-re-frame-example :mvn/version '"0.1.0-SNAPSHOT"'#2022-02-1405:45robert-stuttafordthis is very cool thank you!#2022-02-1406:56jumarThanks @U7RJTCH6J
I also found this: https://github.com/hagmonk/depify
It can be helpful to convert project.clj to deps.edn.#2022-02-1407:24jumarA really useful tool - I already found one big dependency (almost 40M) which hasn't been needed in our app for years.#2022-02-1407:28phronmophobicNice! Let me know if you have any suggestions or find any bugs.#2022-02-1407:32jumarA way to produce machine-readable output if there's not one already.
E.g. CSV.
Right now I'm doing naively something like this:
cat deps-size.txt | sed -E 's/( |,)+//g' | tr '|' ',' > deps-size.csv
Then I can explore it with https://www.visidata.org/, Excel, etc.#2022-02-1407:36phronmophobicGreat idea! Just created an issue https://github.com/phronmophobic/snowball/issues/1#2022-02-1407:41jumarAlso I'm not sure I understand the treemap visualization (it's quite messy for a larger project or I just didn't know how to read it well)
Does it try to visualize the dependency chain? (that is if box B is inside A it means that dependency A brings dependency B?)
Either way, it could be useful to have a plaintext version of such treemap.#2022-02-1407:51phronmophobic> Also I'm not sure I understand the treemap visualization (it's quite messy for a larger project or I just didn't know how to read it well)
I agree that the treemap is a little messy. If the project is open source, I would be interested to see what the output looks like so I can think about how to improve it.
> Does it try to visualize the dependency chain? (that is if box B is inside A it means that dependency A brings dependency B?)
Yes, that's how it currently works. Every box is a dependency. The dependency box will have sub-boxes for each of its dependencies and a "self" box for its own code (you may seems some labels such as "self:<projectname>".
> Either way, it could be useful to have a plaintext version of such treemap.
I'm not sure what that means. Do you have an example?#2022-02-1409:15henryw374cool! I noticed a lot of people citing build size as a cljs issue in the last clojure survey, but not much discussion about that generally that I'm aware of. Larger build size doesn't necessarily mean significantly slower page load or more data transfer over multiple visits - see https://widdindustries.com/clojurescript-datetime-lib-comparison/ for example. but if you do decide reducing build size is necessary then this tool looks handy#2022-02-1411:13jumar@U7RJTCH6J My project is closed-source but I don't think there's anything sensitive - I can share it via DM.
About this:
> Either way, it could be useful to have a plaintext version of such treemap.
I meant that instead of just a picture I'd like to get the actual structure that's used to generate the picture - perhaps as EDN or whatever.
So I can navigate it in a terminal and even build an alternative representation if needed.#2022-02-1309:36pezCalva, a Clojure IDE extension for VS Code, v2.0.243 is out. Thanks to all contributors! These are the changes since last announcement:
• https://github.com/BetterThanTomorrow/calva/pull/1179
• Maintenance: https://github.com/BetterThanTomorrow/calva/pull/1529
• Maintenance: https://github.com/BetterThanTomorrow/calva/pull/1524
• Maintenance: https://github.com/BetterThanTomorrow/calva/pull/1520
• Maintenance: https://github.com/BetterThanTomorrow/calva/pull/1520 (Change was not actually included in this release. See next release.)
• Fix: https://github.com/BetterThanTomorrow/calva/issues/1594
• Fix: https://github.com/BetterThanTomorrow/calva/issues/1516
• Fix: https://github.com/BetterThanTomorrow/calva/issues/1594
• Fix: https://github.com/BetterThanTomorrow/calva/issues/1495
• https://github.com/BetterThanTomorrow/calva/issues/1465
• https://github.com/BetterThanTomorrow/calva/issues/1474
• https://github.com/BetterThanTomorrow/calva/pull/1442
• https://github.com/BetterThanTomorrow/calva/issues/1299
• Workaround: https://github.com/BetterThanTomorrow/calva/pull/1475
• https://github.com/BetterThanTomorrow/calva/issues/1250
• Fix: [Snippet in custom command doesn't work with function metadata] (https://github.com/BetterThanTomorrow/calva/issues/1463)
• https://github.com/BetterThanTomorrow/calva/pull/1454
• https://github.com/BetterThanTomorrow/calva/issues/1456.#2022-02-1310:03pezThe latest change is extra important, because it fixes problems with Calva formatting that has stopped it from working in some files with idiomatic Clojure code. (Due to a dependency on legacy rewrite-cljs). #2022-02-1310:04pezI specifically remember this hitting @U21QNFC5C. Maybe it's time to try out Calva again? 😀#2022-02-1407:45ingesol@U0ETXRFEW Haha, Calva was great, but unfortunately I was too fond of intellij text editing and multiple cursors.#2022-02-1320:51magnarshttps://github.com/magnars/optimus, a ring middleware for frontend performance optimisation, is out of its 0.x infancy after 9 years. It will concatenate, minify, cache-bust and otherwise optimise your frontend assets. The newest release [optimus "2022-02-13"] has:
• Pluggable JS engine via JSR223. Execute JS optimisations w/ GraalJS, Nashorn or Rhino.
• This means that the dependency on clj-v8 and its V8 binaries are gone. This allows us to:
• Add support for Windows and M1 macs.#2022-02-1321:46quollDespite Rich publicly castigating semantic versioning, I still like it and have continued to use it. The primary alternative that I’m aware of has been github hashcodes, which I don’t like due to their opacity. But using the release date? I love it! ❤️#2022-02-1323:07borkdudeI'm doing the same for clj-kondo :)
@U07FCNURX I remember having used your ring middleware in one of my first Clojure projects almost a decade or so ago and remember that a colleague who was using Windows could not run this. Nice to see it finally got addressed :).#2022-02-1407:46magnarsWindows support was a long time coming, since Nashorn was roughly 10x slower than V8, which reduced the utility of Optimus too much. Thankfully JSR223 with GraalJS works great on all sorts of machines. 🙂#2022-02-1415:45Alex Miller (Clojure team)a significant downside of using dashed date versions is that Maven doesn't understand that. clj-kondo's dotted dates are much better for that.#2022-02-1420:07magnarsThanks for the heads up, I'll keep that in mind going forward! 👍#2022-02-1420:08borkdudeOne thing I will maybe change about clj-kondo's format is strip the leading zeroes, e.g. 2022.02.08 will become 2022.2.8#2022-02-1420:39Alex Miller (Clojure team)that might break sorting in some scenarios#2022-02-1420:39Alex Miller (Clojure team)certainly breaks lexicographic sorting. Maven version comparators convert those to numbers so that should be ok, but tooling around maven things is not always so good#2022-02-1420:45borkdudeWell maybe for the next project that will adopt that kind of versioning. I already had to do this processing for clj-kondo's LSP package (which uses the same version as clj-kondo) on npm since they don't even accept these leading zeroes.#2022-02-1420:49borkdudehttps://marketplace.visualstudio.com/items?itemName=borkdude.clj-kondo -> 2022.2.9#2022-02-1321:15cheelJust started a text-formatting library https://github.com/rorokimdim/pp-grid
Designed for the repl. Please see some of the examples in README to learn more.
Initial alpha version 0.0.1 just uploaded to clojars.
I'm a hobby clojurist. Still learning clojure. So will appreciate help in improving the code, fixing bugs or adding features. Thank you!#2022-02-1517:54Santanu ChakrabartiI checked your library. Very impressive.#2022-02-1518:26cheelthanks for checking it out!#2022-02-1408:21sachin gurjarHi, I am sachin gurjar who is passionate about coding. looking for internship or full time junior role in frontend or full stack. I highly recommend you to see my portfolio/website at https://sachingurjar.com/#2022-02-1416:35seancorfieldDeleted as spam and deactivated.#2022-02-1411:13borkdudeJust released a new version of #nbb (0.1.6). It is a scripting tool for Node.js akin to #babashka. This release has a massive performance improvement (4-6x) for loops. Also the bundled promesa library by @niwinz was updated which has -> and ->> macros for promises. And now nbb is compatible with Graal.js too. Last announcement here was with version 0.1.0. Check out all changes since then:
https://github.com/babashka/nbb/blob/main/CHANGELOG.md#016
Try it out locally using npx nbb#2022-02-1411:16Lukas DomagalaNice! Is there a link to the performance speed-up change? I’m interested to see how you got so much more out of it.#2022-02-1411:16borkdudeCheck the latest commit in SCI which is the interpreter backing this.#2022-02-1411:17borkdudeThe gist is: now it's using mutable arrays instead of an immutable map for local bindings.#2022-02-1411:20Lukas DomagalaThanks. I was checking SCI’s changelog but that commit isn’t in the changelog yet 😅#2022-02-1411:21borkdudecorrect and it won't cover any details#2022-02-1411:22borkdudeThe gist is just what I said, details are in the commit :)#2022-02-1411:23Lukas DomagalaYeah, I’m looking at the commit right now. My comment was just an explanation for why I didn’t find the change myself. Thanks for pointing me to the right place clojure-spin#2022-02-1422:01Mark WardleNew release of hermes - v0.8.353 - SNOMED CT terminology library and HTTP service, with optional FHIR terminology server if required. https://github.com/wardle/hermes/releases/tag/v0.8.353 It is one component of a suite of composable data services for health and care, that I join together in real-life clinical applications using a graph API via @wilkerlucio’s excellent pathom library. Deployed and running within the NHS here in the UK, as well as other deployments supporting academic research.#2022-02-1516:58wilkerlucioHello everyone! Today Pathom Viz 2022.2.15 is out! This release includes:
• Resize panels now uses % instead of absolute sizes for a better app resize flow
• Render entity data in request history when available
◦ Note for that you need to bump Pathom Viz Connector to version 2022.02.14
• Fix situation where Pathom 3 renders a Trace view with blank data
• Save entity data in query history
• Support lenient mode setting in query editor
• Support include stats setting in query editor
• Support report from strict errors in Pathom 3
◦ Note that the latest Pathom 3 doesn't have the changes yet to work with this, but you can try using the latest SNAPSHOT release of Pathom 3, which is 2022.02.14-alpha-SNAPSHOT. For more info on this check https://github.com/wilkerlucio/pathom3/pull/129
For current users, just relaunch the app to get it automatically updated. Or download it from https://github.com/wilkerlucio/pathom-viz/releases/tag/v2022.2.15#2022-02-1518:21KelvinIntroducing v0.1.0 of Flint, a Clojure(Script) DSL for creating SPARQL query and update strings.
https://github.com/yetanalytics/flint
Example:
(require '[com.yetanalytics.flint :as flint])
(flint/format-query '{:select [?x] :where [[?x "<>" 100]]})
;; => SELECT ?x WHERE { ?x <> 100 . }#2022-02-1609:30rickmoynihanWow this looks great!
It’s something I’ve been meaning to write for a long time; bravo!!!
I’ve only looked at this for two minutes, and it looks like it works almost exactly how I’d imagine but a few questions:
1. Have you thought about adding a protocol for representing URI literals, and extending it to java.net.URI and perhaps letting users extend it to jena/rdf4j’s URI classes? Having to encode a string as "<>" feels wrong. What if you had an xsd string which was of the form "<[stuff]>" how would that be interpreted?
2. Similarly providing protocols for coercing other literals, e.g. xsd:date vs xsd:dateTime etc. (These protocols would presumably want to also define datatype-uri accessor.) Like 1 this would allow passing datatypes easily between this and an arbitrary RDF backend e.g. jena/rdf4j.
3. In the map bgp/triple syntax can you also write {:dc/publisher ?publisher} or do you always need to wrap a set over it?
4. Have you considered adding a parser that targets SPARQL 1.1. query strings and converts them into this edn query data structure?#2022-02-1609:40simongrayThis looks very useful. Thanks a lot!#2022-02-1614:40Kelvin@U06HHF230
1. I actually have not thought about using protocols to represent literals. Extending any such protocol to a particular Java library could be tricky, however, since Flint supports cljs (and doubly so for a particular Jena class, since I want it to remain implementation-agnostic). As of right now, angle brackets = IRIs, so any string surrounded by them is an IRI, and any IRI will have to be surrounded by them.
2. For the above reason (i.e. I haven't thought about using protocols), there isn't support for literals beyond strings, numerics, booleans, and dateTimes. I wasn't sure how I'd actually implement literals beyond that so thanks for the protocols suggestion; I figure that the already-supported literals will cover most peoples' cases, though, so this would not be a huge priority.
3. You always need to wrap an object in a set, as that is how they're written in https://github.com/ont-app/igraph#the-igraph-protocol. I understand that this can get annoying, though, so maybe in the future Flint can have syntactic sugar where ?obj becomes #{?obj}.
4. I actually did, but I abandoned that idea early on due to its complexity. A big problem is that there are certain valid SPARQL strings that Flint does not support, e.g. https://www.w3.org/TR/sparql11-query/#collections, as well as subtle syntax variations.#2022-02-1615:04rickmoynihan@U02FU7RMG8M: Thanks for the reply… perhaps we can take this discussion to #rdf?#2022-02-1615:06KelvinI was not aware that there was an RDF channel, but sure we can talk more there.#2022-02-1615:07rickmoynihan:thumbsup: cool#2022-02-1610:47Carsten BehringA new release 0.3.1. of opencpu-clj, a Clojure client to https://www.opencpu.org/ , is available.
It was updated to match with small changes in the public opencpu cloud server at https://cloud.opencpu.org/ocpu/
https://clojars.org/opencpu-clj#2022-02-1611:22Ivar RefsdalI'm pleased to announce https://github.com/ivarref/clj-paginate, a Clojure (JVM) library to paginate vectors and maps according to the GraphQL Cursor Connections Specification.
I spent way more time on this than I thought I would, so hopefully it is useful to someone 😅#2022-02-1721:47steveb8nThis is a great idea. Do you plan to support cljs eventually? Also, adding an adapter for the new Clojure Iterator on top of this will make it even more appealing imho#2022-02-1812:34Ivar RefsdalThanks!
Not any plans for cljs per se, but I don't think it should be hard to port.
The java/JVM specific things is just type hints and an improvement to pr-str usage. Note that this library is for the data serving side, not sure how common cljs servers/backends are?
The new Clojure iterator is neat. I am not quite sure what you mean here though. Are you suggesting that 1. clj-paginate should support Clojure Iterator as input in addition to vectors and maps, or are you suggesting that a 2. client side consumer could consume a graphql cursor pagination using the new clojure iterator?
For 1. I don't think it's a very good match. Clj-paginate needs a sorted and indexed collection of some sort, at least that is how it resumes giving out data.
I think 2. is fine, but I'm not sure how it would support what I've termed "long polling", that is: sleeping for a while and then checking if there is more data. But if long polling is not needed, it's absolutely a good match I think. I wrote a simple gist for this some time back:
https://gist.github.com/ivarref/41d4914b1ec3936ad83e0ed9a9c8517d#2022-02-2023:09steveb8nI’m primarily thinking about #2 in re-frame apps#2022-02-1614:21Sam RitchieAnnouncing v0.21.1 of the #sicmutils computer algebra system! The big feature of this release is an exported #clj-kondo config that can lint all #sicmutils macros.
• Clojars: https://clojars.org/sicmutils/sicmutils
• detailed release notes: https://github.com/sicmutils/sicmutils/releases/tag/v0.21.1
• Linter docs and installation instructions on cljdoc: https://cljdoc.org/d/sicmutils/sicmutils/0.21.1/doc/misc/clj-kondo-linters
I went overboard thanks to the wonderful hooks API, so the linter now provides surgical advice to pattern-matching authors and users of other binding macros. #clj-kondo is some amazing Lispy sorcery. Thank you @borkdude for your help!
Cheers!#2022-02-1617:16Alex Miller (Clojure team)Clojure https://clojure.org/releases/devchangelog#v1.11.0-rc1 is now available, functionally same as beta1
• https://clojure.atlassian.net/browse/CLJ-2697 Add 1.11 changelog
• https://clojure.atlassian.net/browse/CLJ-2695 Add more tests for parse-double
If you haven't tried 1.11 with your project yet, now is the time! We would love to know there's an issue before we release rather than after. You can review the https://github.com/clojure/clojure/blob/master/changes.md#changes-to-clojure-in-version-1110.#2022-02-1618:08seancorfieldThe change log says "CLJ-2664 Add clojure.java.math namespace, wrappers for java.lang.Math" which might be confusing for folks, given that it ended up being called clojure.math -- is it worth rewording that to clarify the end result in 1.11?#2022-02-1704:21eccentric JWhoa that keyword argument feature is awesome! Thank you!!#2022-02-1704:59seancorfield@U8WFYMFRU You mean the Alpha 1 change? https://clojure.org/releases/devchangelog#v1.11.0-alpha1 (March last year)#2022-02-1705:10eccentric J😅 Hah yeah missed that but Alex's link covers the full changelog#2022-02-1705:14seancorfieldWe had Alpha 1 in production pretty quickly so that we could take advantage of that -- it's great!#2022-02-1710:32rickmoynihanJust tried 1.11-rc1 on an application codebase with 500+ integration tests and maybe 5/6000 assertions - all green ✅ no errors discovered here!#2022-02-1712:36Alex Miller (Clojure team)Thanks, appreciate the report!#2022-02-1712:54rickmoynihanYou’re welcome, we appreciate the clojure development 🙇#2022-02-1807:35Eric@U04V70XH6 "... it ended up being called `clojure.math` -- is it worth rewording that to clarify the end result in 1.11?"
I'm a beginner and was looking for a clojure math library. I kept trying to (require [clojure.math :as math]) because I saw it in the repo. After I searched Slack and found this message, I tried changing my clojure version in lein to 1.11.0-rc1 and it fixed my compilation error. 😆
This was just an anecdote from a lost n00b, but I had no problem finding clojure.math.#2022-02-1808:18seancorfieldWe have RC 1 on our QA/staging systems now and it should be on our production systems by the middle of next week.#2022-02-1808:18seancorfield(we have a mix of Alpha 4 and Beta 1 in production right now)#2022-02-2109:04rickmoynihanJust tried 1.11.0-rc1 on another project 346 tests, 1393 assertions all green ✅#2022-02-2222:56seancorfieldJust FYI: we have RC 1 in production for all processes now.#2022-02-2321:13Alex Miller (Clojure team)Anyone else out there testing 1.11.0-rc1? If you have feedback (good or bad) please let us know!#2022-02-2321:18lukaszI tried RC1 with a couple of our biggest test suites and no issues so far#2022-02-2321:18borkdudeEveryone running the latest babashka has been trying out beta1 :-) - So far I haven't heard any issues related to that.#2022-02-2321:32Daniel JompheRan our test suite with RC 1 locally over Datomic Cloud's dev-local tooling. All fine.
This is a Datomic Cloud Ion product, so a real migration depends on you. 🙂
Bumping it back down until then...#2022-02-2321:59imreWe used alpha3 then beta1 and are slowly rolling out rc1 as services receive updates, no problems exerienced so far. Math additions are great!#2022-02-2323:15dorabrc1 works fine. Smallish code base, but reasonably good tests.#2022-02-2323:35jacob.maineThe latest clojure-lsp (released today) is built with rc1. lsp 2022.02.23-12.12.12. No issues reported so far, or at least none that I’ve heard about.#2022-02-2406:42henryw374no issues so far :thumbsup:#2022-02-2407:56flowthingRan the test suites with 1.11.0-rc1 for five Clojure projects I work on (~100,000 lines of Clojure). All green. :thumbsup:#2022-02-2408:18msolliWe have rc1 in production. No issues. (~50 kloc of Clojure).#2022-03-0214:08Sam Ritchie@U064X3EF3 all tests pass with no changes on https://github.com/sicmutils/sicmutils, 27k loc and 7k tests.
(just a batch of warnings from abs, update-keys and update-vals in various dependencies: https://gist.github.com/sritchie/f504e37fa73305c045de82502b6f7e1f)#2022-02-1621:17uochanJust released vim-iced ver 3.8.0, Clojure Interactive Development Environment for Vim8/Neovim.
https://github.com/liquidz/vim-iced
Added support for jumping to protocol implementations(requires clj-kondo v2022.02.09 or later) and storing evaluated results to numbered registers.#2022-02-1621:32borkdude@UKFSJSM38 ^ :)#2022-02-2321:13Alex Miller (Clojure team)Anyone else out there testing 1.11.0-rc1? If you have feedback (good or bad) please let us know!#2022-02-1703:40danielcomptonClojurists Together is funding work to bring custom formatters (needed for cljs-devtools) to Firefox: https://www.clojuriststogether.org/news/funding-development-on-custom-formatters-for-firefox/#2022-02-2107:01plexusOMG after all these years 🙀 bmo#2022-03-0106:00Matthew Davidson (kingmob)Such good news. I took a stab a few years ago, but getting into the FF code base was more than I bargained on#2022-02-1810:33borkdudepod-babashka-go-sqlite3 0.1.0 is out: https://github.com/babashka/pod-babashka-go-sqlite3
it's been a year since the previous release.
use sqlite3 directly from babashka without installing sqlite, the pod is self-contained and written in ... golang!
discuss in #babashka#2022-02-1821:14Jakub Holý (HolyJak)Hm, I have been looking for a Rust project to write. Making sqlite / something pod for bb sounds as just the right thing 🙂#2022-02-1821:17borkdudeYeap :) There's a Rust filewatcher pod for bb too#2022-02-1821:21borkdudeYou can check here for all "registered" pods: https://github.com/babashka/pod-registry#2022-02-1822:01Alex Miller (Clojure team)https://github.com/clojure/tools.build v0.7.7 is now available
• compile-clj - TBUILD-27 - Use basis as default src dirs
• Update to tools.deps.alpha 0.12.1148#2022-02-1900:11practicalli-johnhttps://github.com/practicalli/clojure-deps-edn/ provides a wide range of community tools via aliases that can be used across all projects.
The latest updates include:
• migrating aliases to clojure.exec -X option for supported projects, using -T execution option where the alias should run outside a project classpath
• :src/clojure to add local clone of Clojure core sources (Java & Clojure), supporting Jump to definition of Clojure core, particularly the Java sources
• src/java17 to add manually downloaded Java JDK sources to the classpath, supporting editor jump to definition for Java interop
• :lib/kaocha includes kaocha as a library, enabling scripts such as kaocha-runner.el to run Kaocha test runner from Emacs Cider
• update Lambda Island Kaocha with :exec-args to fail-fast by default for :test/run and :test/watch - speeding up test run workflow when there are failing tests
• re-organise :inspect/reveal and :repl/rebel-reveal aliases
◦ renamed :inspect/reveal-nrepl-cider to :inspect/reveal-cider simplifying the alias name
• add :repl/interactive and :repl/headless to run a simple terminal UI REPL with nREPL server in interactive (with a client) or headless (without client). Or use :repl/nrepl with our without the -i flag for the same results.
• Simplified project introduction and https://github.com/practicalli/clojure-deps-edn#common-development-tasks
• Updated library versions for all aliases (see https://github.com/practicalli/clojure-deps-edn/blob/live/CHANGELOG.org#2021-02-18 for more details
The next release of this project will start supporting the tools.build approach and deprecate aliases such as depstar (which itself is deprecated).
Thanks to Nubank/Cognitect and other community members for supporting this and other Practicalli projects.#2022-02-2023:12mike_ananevNew release of Bouncycastle wrapper for Clojure to work with GOST.
The library provides:
- encryption, mac using GOST 28147-89, GOST 3412-2015;
- digest, hmac using GOST3411-94/2012 256 and 512 bits;
- signature using GOST3410-2012 256 and 512 bit key length;
- key generation: secret keys, public/private keys, password based keys;
- compression + encryption + mac / decryption + check mac + decompression
- save/load keys (secret, private, public) to PEM format.
https://github.com/redstarssystems/gost#2022-02-2109:16slipsetA new version of https://github.com/clj-commons/clj-yaml is out. Thanks to @odd.andreas for contributing!
[Fix https://github.com/clj-commons/clj-yaml/issues/27] Add support for indent and indicator-indent (https://github.com/clj-commons/clj-yaml/pull/28)
This change makes it possible to specify the desired
indentation both for the sequence-indicator and for
nested keys.
#2022-02-2110:07borkdudeThanks! Bumped in #babashka!#2022-02-2512:32oddsorThanks @U04V5VAUN and @U04V15CAJ! I was using Babashka to make a script that updates yaml and ended up needing this 🙏#2022-02-2123:42wilkerlucioRelease com.wsscode/pathom3-graphql {:mvn/version "2022.02.21-2-alpha"}, this is first jar release of the library, no changes from the previous dev versions, just making it easy to add via MVN. More details at https://github.com/wilkerlucio/pathom3-graphql#2022-02-2200:58wilkerlucioPathom 3 2022.02.21-alpha is out! This release includes:
• INTERNAL BREAK: the internal plan-and-run! from all runners now return env instead of the graph plan
• Runner exceptions now return a wrapped error that includes environment data
• Boundary interface errors are always data
• Boundary interface omit stats by default, open with the :pathom/include-stats? flag on the request
• Add pbip/env-wrap-plugin
https://clojars.org/com.wsscode/pathom3
Also new doc pages for some of the new features:
https://pathom3.wsscode.com/docs/eql/#strict-errors-as-data
https://pathom3.wsscode.com/docs/built-in-plugins#extend-environment#2022-02-2202:03jacob.mainehttps://github.com/mainej/headlessui-reagent 1.5.0.47 is out. This release adds the Combobox (a.k.a. Autocomplete) component introduced in @headlessui/react 1.5.0. The repo also includes a new https://github.com/mainej/headlessui-reagent/tree/main/example project showing all the components in action.
headlessui-reagent brings accessible, keyboard-friendly, style-agnostic UI components from https://headlessui.dev/ to Reagent and re-frame projects.#2022-02-2204:01olafJust published https://tryclojure.org/ a simple tutorial with the REPL for the Clojure syntax. I got inspired by https://tryhaskell.org and I’ve used #sci to create the command line interface. Source: https://github.com/elias94/tryclojure
My girlfriend completed it so I hope is simple enough for totally beginners. Contributions and ideas are welcome!#2022-02-2205:07jeroenvandijkBeautiful! (3rd question only allows one specific list '( 1 2 3), but that should be any list I think)#2022-02-2205:33olafYes, fixed thanks :thumbsup:#2022-02-2206:01robert-stuttafordFYI @U01UYD2CL10 i get a certificate not valid SSL error when I visit, likely because i have https-everywhere enabled :)#2022-02-2206:21olaf@U0509NKGK thanks. I’m waiting for netlify for it, maybe retry later#2022-02-2206:26olafhttps://tryclojure.org/#2022-02-2206:28pezAwesome stuff! Minor things I noted: On the phone it still said that the repl is on the right, and the content spans past the screen width, making the whole page scroll sideways. #2022-02-2207:07olafThanks @U0ETXRFEW, fixed! Btw, it’s all done with #calva#2022-02-2209:59borkdude@U01UYD2CL10 Cool! I'll add it to the projects using SCI here: https://github.com/babashka/sci#projects-using-sci#2022-02-2210:01borkdudeDone#2022-02-2210:01olafThanks!!#2022-02-2210:11borkdude@U01UYD2CL10 I like the UI design, awesome work. One possible improvement: when pressing Ctrl-C or so, perhaps abort reading an incompleted form. E.g. when I typed: (first '("foo "bar")) it was difficult for me to see that I still needed to insert another quote and some parens to get back into a functioning REPL. Having a way to start over from scratch, like Ctrl-C or so, could help.#2022-02-2210:24borkdude@U01UYD2CL10 btw, did you know that:
(clojure.repl/doc inc)
also works? :) You might want to evaluate (require '[clojure.repl :refer :all])) in your SCI ctx so doc is available immediately and document this.#2022-02-2210:37Jakub Holý (HolyJak)Perhaps mention to press Enter to Eval the expression?#2022-02-2210:39borkdudeI think you could even display what closing delimiter is expected still as this is exposed in the ex-data of SCI's parser.#2022-02-2210:40borkdudeuser=> (ex-data (try (sci/eval-string "[") (catch Exception e e)))
{:type :sci.error/parse, :line 1, :column 2, :edamame/expected-delimiter "]", :edamame/opened-delimiter "[", :edamame/opened-delimiter-loc {:row 1, :col 1}, :phase "parse", :file nil}#2022-02-2211:50borkdudescratched my own itch: https://github.com/elias94/tryclojure/pull/3#2022-02-2211:52plexusGreat stuff! Thanks for making this! small suggestion, put the current "page" people are on in the URL, so they can bookmark and jump back, etc#2022-02-2211:54olaf@U04V15CAJ sorry for the late reply I was literally doing it 😄
what about a placeholder?#2022-02-2211:55olafP.s. there’s also a dark version depending on your OS#2022-02-2211:57borkdude@U01UYD2CL10 In the PR I showed it in the hint at the top of the REPL#2022-02-2211:57borkdudeFeel free to close the PR and do whatever you want, if you want to do it another way#2022-02-2212:00olafI’m scared the hint at the top is not fixed and disappears if I keep typing commands#2022-02-2212:00olafThanks for the hints, I’ve added all of them#2022-02-2212:00borkdudeok, just use the PR as inspiration and close it :)#2022-02-2212:13mbjarlandperhaps also a link to the clojure exercism track (`https://exercism.org/tracks/clojure`) at the end as that seems to get a lot of traction lately#2022-02-2212:24borkdude@U01UYD2CL10 Awesome, it works :)
One very minor thing: there is a typo, demiliter is spelled as delimiter#2022-02-2212:26borkdudeAnother idea: print functions as a special format instead of the JS output.
https://news.ycombinator.com/item?id=30426531
E.g. (if (fn? ...) "<function>" ...)
There may be a better way for this, e.g. overriding some protocol or multi-method. @U5H74UNSF how does clerk do this?#2022-02-2212:30borkdudeAlso, when pressing ctrl-c, the delimiter hint can go away, now it stays there#2022-02-2212:35olaf@U04V15CAJ thanks, I’ve also added (help) with some functions. Fixed ctrl-c.
For the print function makes sense but seems not working as expected. It seems that s is always a string.
(defn set-print-fn
"Setup a custom `print-fn` for sci."
[f]
(sci/alter-var-root sci/print-fn (constantly f)))
(set-print-fn (fn [s]
(if (fn? s)
"<function>"
(write-repl! s))))#2022-02-2212:38borkdudeThis is probably because you transform the evaluated result in a string first.#2022-02-2212:42borkdudeAh, I think using pr-str is better:
cljs.user=> (pr-str {:a (fn [])})
"{:a #object[Function]}"#2022-02-2212:43borkdudeInstead of format-out you can probably just use pr-str#2022-02-2212:45olafWhen I transform the output in a string I just check if is fn?. It works!#2022-02-2212:46borkdudeThat won't work for nested things like {:a (fn [])} whereas pr-str will work#2022-02-2212:51olafPushed the patch with pr-str#2022-02-2212:52olaf=>(map inc)
#object[Function]
#2022-02-2212:55borkdudeawesome!#2022-02-2212:55olafThanks @U04V15CAJ#2022-02-2212:56borkdudeYou too!#2022-02-2213:19borkdude@U01UYD2CL10 I found another interesting edge case:
Try typing {:a ;#2022-02-2213:20borkdudethere is no way to finish the input because following inputs are seen without the newline. Perhaps it makes sense to include the newline in the read input.#2022-02-2213:20borkdudeSimilar for how [1\n2\n3] becomes [123] which imo should be [1 2 3]#2022-02-2213:23pezOr eval using a button and let return enter newlines.#2022-02-2213:24borkdudeI like the current behavior better, no mouse usage#2022-02-2213:27pezI was using it from a phone. 😃 On a computer alt+enter could evaluate. But including the newline in the read input might also work.#2022-02-2213:30pez@U01UYD2CL10 perhaps a Where to go next link in the footer could list some resources.#2022-02-2213:51borkdudeMade an issue about it here: https://github.com/elias94/tryclojure/issues/5#2022-02-2214:50borkdudeSome more feedback:
https://news.ycombinator.com/item?id=30428311
• can't copy/paste from REPL
• description of range unclear. might want to point out that (doc range) is available.#2022-02-2214:55borkdudeI'll make issues#2022-02-2216:33phronmophobicwhen I try to use it on mobile. I get stuck at hello world. I'm pretty sure it's because the quotes on mobile are the wrong kind. “Hello World” shows an errror.#2022-02-2216:38jeroenvandijk@U7RJTCH6J IOS? Worked for me on Android in the Slack webinterface#2022-02-2216:41borkdude@U7RJTCH6J This is Clojure-compatible behavior ;)
user=> "Hello World"
Syntax error compiling at (REPL:0:0).
Unable to resolve symbol: "Hello in this context
#2022-02-2216:42borkdudeI hate those quotes on iOS... everytime I type code this trips me up as well#2022-02-2216:51mbjarlandcan confirm it seems to work on android (galaxy S20 and brave browser, latest version)#2022-02-2216:51phronmophobicI'm on iOS. I know that this is clojure-compatible behavior, but I'm not sure even how to type a normal quote on iOS#2022-02-2216:52phronmophobicIf the repl wants to support iOS, then overriding quote insertion seems like a big improvement#2022-02-2216:54phronmophobicFor example, the same input "just works" at https://clojurescript.io#2022-02-2216:56pezI think there should be some way to inform the browser about this. I used iOS also this morning. As a workaround I long-pressed the quote key and could enter the ones that work.#2022-02-2216:57pezI agree it is better if it just works. Just sharing this info.#2022-02-2216:59borkdudeIt doesn't work for me. Perhaps there is something in that site that checks the user agent or some other setting?#2022-02-2217:00phronmophobicWhen I type “, http://clojurescript.io just inserts " instead#2022-02-2217:08borkdudeCurious which part of their code does that. Nothing special comes up when I grep for the smart quote.#2022-02-2217:12pezDoes it have spellcheck="false" on the input element, maybe?#2022-02-2217:18phronmophobicI think that might be handled by codemirror. Does tryclojure use codemirror?#2022-02-2217:19phronmophobictyping quote from iOS into a normal codemirror editor uses "#2022-02-2217:24borkdudeaaah#2022-02-2217:24borkdudelet's find out what codemirror does then#2022-02-2217:29phronmophobicI think it's as @U0ETXRFEW , suggested. They set spellcheck="false"
https://github.com/codemirror/CodeMirror/blob/145c3e23e2bcd1a6643c706c74129b2c3ec5f3fd/src/input/input.js#L119#2022-02-2217:31borkdudeworth a shot then#2022-02-2222:27borkdudehttps://github.com/elias94/tryclojure/issues/4#2022-02-2300:06olafThanks everyone for the help! Fixed all the bugs and merged PRs. spellcheck="false" was the solution#2022-02-2210:45jpeI made a Magit-style interface for creating projects with clj-new and deps-new in Emacs. I included a couple cool templates I've come across but I'm looking for worthy additions if anyone knows any 🙂 https://github.com/jpe90/emacs-clj-deps-new#2022-02-2216:53Ben SlessA. Very cool
B. How would you like to turn it into a full-on porcelain for clojure CLI?#2022-02-2218:11jpethat's not a bad idea! I'd finally be forced to actually learn how clojure CLI works instead of copying and pasting random aliases off the internet#2022-02-2218:56Ben Slesssimilar story with learning git 🙂#2022-02-2216:02Alex Miller (Clojure team)https://twitter.com/cognitect/status/1496153239338766337#2022-02-2216:24quollDone! :thumbsup:#2022-02-2216:44wilkerluciodone 👍#2022-02-2217:04p-himikI wonder if you can help me understand some options in question 13.
There's Scientific and there's Education. But then there's also Academic - what would be an example here that fits neither Scientific nor Education?#2022-02-2217:09Alex Miller (Clojure team)Just take what you feel is closest, or put it in Other#2022-02-2218:02kinleydDone!#2022-02-2223:42respatializedprobably too late to update after deployment but should we consider babashka its own "dialect" of Clojure for the purposes of this survey?#2022-02-2300:06Alex Miller (Clojure team)was considered, decided we would only include those dialects maintained under the Clojure org#2022-02-2300:07Alex Miller (Clojure team)also consider filling out the Babashka survey! :) https://forms.gle/ko3NjDg2SwXeEoNQ9#2022-02-2223:32Carsten BehringI updated my polyglot docker image and it contains now the Clojure dependencies inside the image for faster startup:
The included libraries and their versions are listed here: https://github.com/behrica/clj-py-r-template, v .1.6.0
It is now more usable standalone and you can run it simply by
docker run -ti -p 12345:12345
It starts a clojure repl on port 12345 where all Clojure interop libraries (clj-python, clojisr and others) work out of the box.
It is full extendable if needed by either:
- providing a local deps.edn file
- install python , R or other non-clojure packages in a Dockerfile (suing the FROM behrica/clj-py-r:1.6.0 )#2022-02-2313:58ericdalloclojure-lsp Released https://clojure-lsp.io/ https://github.com/clojure-lsp/clojure-lsp/releases/tag/2022.02.23-12.12.12 with a lot of performance improvements and some new features!
Main highlights:
The focus of this release was to make clojure-lsp faster on a lot of places, especially on the post-startup time, which stands for the time clojure-lsp analyzed whole project with clj-kondo default linters but is yet linting whole project for unused-public-vars and looking for test trees. 🚀
We did lots of completion and code actions performance improvements thanks to @jacob.maine which did a great help on that! 👏
Following @borkdude suggestion, clojure-lsp by default now check source-paths from the classpath string and not manually checking your project deps file, this should decrease a lot the false-positives of wrong source-paths, especially for lein/deps mono-repo projects! Check https://clojure-lsp.io/settings/#source-paths-discoveryfor more details 🏁
And at least but not last, we now have support for finding implementations of defprotocols following LSP spec and with the help of clj-kondo 🎉 check the gif for a example
This release was supported by https://www.clojuriststogether.org/ clojurists-together gratitude
Thank you for the new gold sponsor https://github.com/180seg 🧡
For more information check #lsp#2022-02-2316:32erwinrooijakkersMediquest has open sourced its Zorgrank API project at https://github.com/mediquest-nl/zorgrank. It’s a Luminus project that aims to help a general practitioner and patient make joint decisions about the most suitable follow-up care by ranking care providers using a selection model called ZorgRank. Example client of the API can be found here: https://zorgrank-client-demo.mediquest.cloud and the Swagger docs here: https://zorgrank-demo.mediquest.cloud.#2022-02-2411:16borkdudeBabashka fs, a Clojure filesystem library based on java.nio v0.1.3:
• Compatibility improvements for `com.google.cloud/google-cloud-nio`: convert `URI` to `Path` directly without going through `URL`
• Add `create-temp-file`
• Add initial version of `zip`
• Add `read-attributes*` without conversion into map
• Run `create-dirs` for the `dest` directory in `copy-tree` to ensure it exists (https://github.com/duzunov)
• Document `list-dir` `glob-or-accept` argument (https://github.com/holyjak)
API docs: https://babashka.org/fs. For questions, visit #babashka. Source code https://github.com/babashka/fs.
These and more updates are available in the newly released https://github.com/babashka/babashka/blob/master/CHANGELOG.md#076-2022-02-24.
Please leave some feedback about babashka in the https://forms.gle/ko3NjDg2SwXeEoNQ9!#2022-02-2413:21Noah BogartThis is my favorite file system manipulation library. #2022-02-2414:19littleliMichiel! You're a machine! 🙂#2022-02-2417:21lilactownahh I just started using this in a new project and was about to create something akin to create-temp-file 😄 you're a mindreader#2022-02-2421:25Alex Miller (Clojure team)https://github.com/clojure/tools.build v0.8.0 is now available, mostly addressing issues when explicitly binding *project-root*
• compile-clj - always create classpath entries relative to *project-root*
• java-command - don't resolve classpath entries, leave them relative to *project-root*#2022-02-2509:59borkdudeScittle 0.1.2: use ClojureScript directly in browser script tags via #sci, with built-in support for Reagent and cljs-ajax.
Try it immediately on CodePen:
https://codepen.io/Prestance/pen/PoOdZQw
See here how to use it:
https://babashka.org/scittle/
Changes:
https://github.com/babashka/scittle/blob/main/CHANGELOG.md
Channel:
#scittle#2022-02-2518:53wilkerlucioPathom 3 2022.02.25-alpha, this release is packed with nice features and fixes!
◦ ::pcp/expects now can figure implicit attributes on static resolver nested lookup
◦ Planner now removes path options that can't fulfill the sub-query
◦ New priority sort algorithm. Thanks to @mauricio.szabo!
◦ Optimize nested or nodes, pulling nested branches into parent OR node
◦ Add weight sort feature to load balance between OR branches
◦ Fix issue #107 regarding batch + nested optional inputs
◦ Add pf.eql/seq-data->query to find shape of a combined collection
◦ Computation of ::pcp/expects on static resolvers now includes data about nested expectations
https://clojars.org/com.wsscode/pathom3#2022-02-2520:11KelvinAnnouncing Pathetic, a utility library for working with JSONPath: https://github.com/yetanalytics/pathetic#2022-02-2520:12KelvinIt was actually open-source for a while, but we recently decided to do some cleanup in v0.4.0 for the wider Clojure community.#2022-02-2520:24Noah Bogartgreat name haha#2022-02-2520:25Cora (she/her)the name is chef_kiss#2022-02-2520:25Cora (she/her)(and the library looks super useful)#2022-02-2717:02andy.fingerhutStuart Sierra did all the work here, then announced it in the Clojure Google group. I am simply copying the announcement here, for those people who might notice it here but not there: The first change in almost 2 years — it's a new release of Component! https://github.com/stuartsierra/component is a tiny framework for starting and stopping many stateful resources in the right order. This release adds the https://github.com/stuartsierra/component/blob/component-1.1.0/README.md#subsystems.
https://github.com/stuartsierra/component/blob/master/CHANGES.md
Leiningen project.clj: [com.stuartsierra/component "1.1.0"]
deps.edn: com.stuartsierra/component {:mvn/version "1.1.0"}#2022-02-2718:17steffanI am very pleased to announce the first release of clj-otel, a small idiomatic Clojure API for adding telemetry to your libraries and applications using OpenTelemetry, an emerging standard for telemetry in cloud-native software enabling effective observability.
Follow-up in channel #clj-otel
https://github.com/steffan-westcott/clj-otel#2022-02-2809:56oliyI'm pleased to announce a new release of martian with lots of improvements around OpenAPI handling.
martian is an abstraction over HTTP that uses OpenAPI/Swagger/your own interface definitions to simplify interactions with remote systems. An interceptor chain means it can be easily extended, it has built-in support for all the most popular HTTP clients and also has companion libraries for recording/playback, generative testing and more.
https://github.com/oliyh/martian
This release adds support for:
• OpenAPI server URLs directive https://github.com/oliyh/martian/pull/129, thanks https://github.com/bombaywalla
• OpenAPI yaml definitions https://github.com/oliyh/martian/pull/132, thanks https://github.com/bombaywalla
This release fixes:
• Incorrect errors of disallowed keys for OpenAPI bootstrapped instances https://github.com/oliyh/martian/issues/126
• The internal martian spec of an input schema to allow optional keys https://github.com/oliyh/martian/pull/138, thanks https://github.com/chopptimus
• OpenAPI parameters defined in a `$ref` https://github.com/oliyh/martian/issues/112, https://github.com/oliyh/martian/issues/142
• Nested objects with optional keys in Swagger bootstrapped instances https://github.com/oliyh/martian/issues/111
• Interpretation of the `number` leaf schema https://github.com/oliyh/martian/pull/146, thanks https://github.com/bombaywalla
• Interpretation of untyped schemas that have `properties` as objects https://github.com/oliyh/martian/pull/148, thanks https://github.com/bombaywalla
This release improves:
• The main readme and the https://github.com/oliyh/martian/tree/master/vcr, thanks https://github.com/rgkirch
#2022-02-2812:22fmnoiseLet me introduce https://github.com/fmnoise/coldbrew - easy to use Clojure wrappers for https://github.com/ben-manes/caffeine
We're already running that in production for 4 months with no issues, I hope you'll enjoy it too 🙌#2022-02-2815:39dharriganoooh, very nice! I used caffeine a lot when using java and kotlin#2022-02-2815:39dharrigannice to see it here too!#2022-03-0112:38mbjarlandYes indeed, been looking for a lib for caffeine for some time. Excellent work!#2022-03-0117:00Ben Slessquestion, (although I work at AppsFlyer, I have no particular investment in this project), why not use https://github.com/AppsFlyer/cloffeine? Were you unaware of it? was something missing? Did you dislike something about the design?#2022-03-0117:08fmnoise@UK0810AQ2 I just needed tool for my use case, not a clojure api wrapper for Caffeine (I don't see any issues doing java interop tbh)
My use case is: I have lacinia graphql resolver (or any other function) and I need to make it cacheable (with expiration and conditions) with minimum amount of code changes. And remove caching with the same minimal amount of code changes.
That's how defcached was born 😎#2022-03-0117:13Ben Sless@U4BEW7F61 I have a personal itch to write something that is compatible with core.cache and core.memoize but I haven't had a need to use caffeine yet#2022-03-0117:15fmnoiseI used caffeine previously, it's very good. core libs should be fine too I guess#2022-03-0118:04roklenarcicI wrote my memento library to address my caching needs via guava but it seems that caffeine is superior#2022-03-0118:04roklenarcicWasnt aware of its existence#2022-02-2820:16Alex Miller (Clojure team)https://clojure.org/releases/tools#v1.10.3.1087 is now available
• Fix error message when git url missing or not inferred
• Pass :exec-fn and :exec-args to -X/-T even when using -Scp
• https://clojure.atlassian.net/browse/TDEPS-222 Make Clojure dependency in pom a compile dependency, not provided
• https://clojure.atlassian.net/browse/TDEPS-203 In -X:deps prep - now takes basis settings, including aliases
• https://clojure.atlassian.net/browse/TDEPS-197 -X:deps git-resolve-tags - now resolves to :git/tag and :git/sha
• -X:deps tree - now takes basis settings
• -X:deps mvn-pom - now takes basis settings
• -X:deps list - put license abbreviation list in a resource and load on demand#2022-02-2822:14Carsten Behringhttps://clojars.org/scicloj/scicloj.ml 0.2.0 is now available
• handling of categorical predictions targets is now fully pushed down to implementing models
All plugins were updated accordingly.#2022-02-2822:16Carsten BehringThe DJL plugin for is available in new version 0.1.9:
• initial support for fasttext was added for text classification tasks
https://clojars.org/org.scicloj/scicloj.ml.clj-djl#2022-03-0106:11Matthew Davidson (kingmob)Announcing the first public release of https://github.com/KingMob/TrueGrit (v1.0.5), a data-driven, idiomatic way to use Resilience4j in Clojure. For when you need functions that don’t give up at the first sign of failure! Includes circuit breakers, bulkheads, retry policies, timeouts and rate limiters. It’s been battle-tested in production for years.#2022-03-0108:59mpenetNew https://github.com/exoscale/coax released (fixes cljs warnings) - coax is a library to allow input coercion from spec definitions#2022-03-0209:58borkdudeProcess, a Clojure wrapper for java.lang.Process v0.1.1:
Similar to tools.build.api/process, it now supports appending output to files (previously it only supported writing). To reduce cognitive overhead between libraries, process adopted the same convention:
• feat https://github.com/babashka/process/issues/44:
◦ Support :out + (`:write` / :append) and :out-file + file
◦ Support :err + (`:write` / :append) and :err-file + file
https://github.com/babashka/process
For questions, go to #babashka#2022-03-0217:00pezA missing piece in Calva was highlighted by @daslu: We didn't treat metadata as part of the form to be evaluated. I've spent some days of work convincing Calva to do the right thing here. Resulting in Calva v2.0.247, which also contains some more of @corasaurus-hex’s wonderful work with making the project more maintainable:
• https://github.com/BetterThanTomorrow/calva/pull/1564
• https://github.com/BetterThanTomorrow/calva/pull/1551
#2022-03-0218:38Carsten BehringNew version of .clj-djl released.
• It allows to configure the fasttext training with all options
https://clojars.org/org.scicloj/scicloj.ml.clj-djl#2022-03-0315:00eccentric JCreated interactive babashka and node-babashka templates on replit
• https://replit.com/@eccentric-j/Babashka-Clojure-Template?v=1
• https://replit.com/@eccentric-j/Node-Babashka-ClojureScript-Template?v=1
They are ready to fork, explore, and build all sorts of cool projects with that can be embedded and shared all around.#2022-03-0317:41borkdudeSCI configs:
https://github.com/babashka/sci-configs
A collection of ready to be used SCI configs
This repo includes SCI configurations for:
• reagent
• promesa
• js-interop
and more to come.#2022-03-0322:35practicalli-johnhttps://github.com/practicalli/clojure-deps-edn user level aliases for Clojure CLI projects and community tools - library dependency updates and alias additions
• graph/ns-deps shows connections between library dependencies and the namespace
• graph/deps now uses tools.deps.graph to show relationship between library
• :lib/pprint-sorted alias to include the https://github.com/greglook/puget when starting a REPL session, enabling sorted keys and set values when pretty printing and colour highlighting
• :lib/sayid include https://github.com/clojure-emacs/sayid as a dependency to support provide REPL driven debugging and profiling (also useful if running a repl for cider-connect or other tools that have a sayid plugin)
• github actions - update checkout to v3
• Update library versions using :project/outated alias (including the latest reveal (free) version - see below
In the next release I'll be moving some aliases under the :search/ qualifier and then move on to looking at tools.build#2022-03-0409:35vlaaadreveal New versions of Reveal — https://vlaaad.github.io/reveal/ and https://vlaaad.github.io/reveal-pro — are out! 🎉
This release was possible thanks to https://www.clojuriststogether.org/'s funding. This release introduces a new https://vlaaad.github.io/reveal/#test-runner, including:
• UI to run and re-run tests and view results in a structured tree output;
• Jumping between errors using Alt+Up/Alt+Down — no need to scroll through kilometers of output;
• Contextual test action on namespaces and vars to make running tests easier;
• Out-of-the box diffing for 2-element tuples and maps with :expected/`:actual` keys;
• test sticker window that can be configured to run tests on the classpath (all or filtered like in cognitect's test runner) — see https://github.com/vlaaad/reveal/blob/ec0baafe8da61a8144bfd9b7741d029b75c3be0f/src/vlaaad/reveal.clj#L525-L559;
Discuss in the thread here or in #reveal#2022-03-0409:41vlaaadOne more improvement that was possible thanks to work on test runner is generic https://github.com/vlaaad/reveal/blob/ec0baafe8da61a8144bfd9b7741d029b75c3be0f/src/vlaaad/reveal.clj#L641-L665 component that can be used to define tree-looking inspectors. One example of how it works is the updated java-bean action that shows java beans as tree, making it much easier to explore java object graphs:#2022-03-0410:09Dumchsory if the question is inappropriate in this thread, but is it possible to “jump” into the reveal window and manipulate cursor with vim (or ideavim)?#2022-03-0410:33vlaaadI'm not sure I understand the question, what do you mean by "jumping"? Changing focus?#2022-03-0410:37vlaaadIf you are talking about interacting with reveal from another window, there is a https://vlaaad.github.io/reveal/#interacting-with-reveal-from-code, but it has higher granularity than manipulating cursors#2022-03-0410:39Dumchlets imaging we have focus on the reveal window. Can we use vim bindings to manage our cursor? Or at least be able to select some text with keybindings (without the mouse)?#2022-03-0411:06vlaaadvim keybindings — no, using keyboard for everything in Reveal window — yes#2022-03-0412:43walterl@UL05W6AEM https://vlaaad.github.io/reveal/#navigation#2022-03-0409:54Lucy WangHi there, clj-statecharts, the state machine and statecharts library for clojure/clojurescript, has released 0.1.2 . https://github.com/lucywang000/clj-statecharts
Relevant changelog:
## v0.1.2 2022/3/1
- support eventless transitions on initial states
- update malli to 0.8.3
#2022-03-0414:25eskosAnnouncing first wide public release of lein-git-revisions 0.3.0, a yet-another-solution to using Git as source for your Leiningen project version! Main differences to prior art are extreme configurability and zero required interaction after initial setup. Supports SemVer, CalVer, direct git metadata, automatic version incrementing, environment injection, conditional metadata and just about everything else, really - it’s all just configuration. Code-to-documentation ratio is about 2:3 🙂
https://github.com/esuomi/lein-git-revisions#2022-03-0414:28eskosA few quick notes:
• Yes, this is probably very overengineered which may make it a bit hard to grok. Just ask! 🙂
• I don’t claim superiority to others, this is merely a new funky flavor of versioning ice cream - I kinda don’t have a proper story/reasoning why I even made this, I had a minor problem a few weeks ago and then it just kinda escalated…
• As always, all feedback is highly appreciated! 🙇 #2022-03-0414:33borkdudeclj-kondo v2022.03.04
New
• https://github.com/clj-kondo/clj-kondo/issues/1240: Add linter :namespace-name-mismatch to detect when namespace name does not match file name. (https://github.com/svdo)
Fixed
• https://github.com/clj-kondo/clj-kondo/issues/1598: :scope-end-row is missing on multi-arity fn args (https://github.com/mainej)
• https://github.com/clj-kondo/clj-kondo/issues/1588: analyze type hint in reified method
• https://github.com/clj-kondo/clj-kondo/issues/1581: redundant fn wrapper false positive when using pre-post-map
• https://github.com/clj-kondo/clj-kondo/issues/1582: False positive Insufficient input when using symbol call
• https://github.com/clj-kondo/clj-kondo/issues/1579: relax linting in tagged literal forms
• https://github.com/clj-kondo/clj-kondo/issues/1578: allow :deprecated-var config in ns form metadata
• https://github.com/clj-kondo/clj-kondo/issues/892: suppress unresolved namespaces in data readers config
• https://github.com/clj-kondo/clj-kondo/issues/1594: lint clojure.test.check.properties/for-all as let
Channel: #clj-kondo#2022-03-0418:34AkizWhy it might be the last one? 😨 #2022-03-0418:49borkdudeI guess I watched the news too much this week...#2022-03-0418:53borkdudeI removed that comment ;)#2022-03-0511:03AkizOh, I was afraid you had health problems or something like that. #2022-03-0511:06borkdudeLuckily nothing that prevents me from doing my work#2022-03-0414:53mkvlrClerk – Local-first notebooks for Clojure – {:mvn/version "0.6.387"} has been released on https://clojars.org/io.github.nextjournal/clerk. ✨ Highlights in this release:
• ⚡ Add clerk/recompute! for fast recomputation of doc without re-parsing & analysis. See the video below for small apps you can now build with this, or the https://github.com/nextjournal/clerk-demo/blob/main/notebooks/dictionary.clj.
• 👁️ Normalize the viewer api to support full map form everywhere, see https://github.com/nextjournal/clerk-demo/blob/main/notebooks/controls.clj for an intro.
• 🧮 Add reagent and js-interop to viewer api, see how to https://twitter.com/mkvlr/status/1499470942585688065 for a given result
• 📊 Add d3-require to the viewer api. Example of defining a https://snapshots.nextjournal.com/clerk/build/fc297cb8b1cd879c888f573d1c7913dafd1d66dd/index.html#/notebooks/viewer_d3_require.clj
• :ladybug: Various bugfixes and other improvements, full https://github.com/nextjournal/clerk/blob/main/CHANGELOG.md#06387-2022-03-03!
For follow-up, I’ve just created #clerk. Here’s some 🐦 https://twitter.com/mkvlr/status/1499470357262127106 announcing the release, RTs very much appreciated! 🙏. P.S. Clerk turned one yesterday, by https://github.com/nextjournal/clerk/commit/21b84c4d37b036a2a8ed438a834610da25992df7. 🎂#2022-03-0422:20uochanJust released antq ver 1.6.0, Tool to point out your outdated dependencies.
https://github.com/liquidz/antq
Supported running behind proxies,
and checking/upgrading installed Clojure CLI Tools:relaxed:#2022-03-0500:49wilkerlucioPathom 3 2022.03.04-alpha is out! https://clojars.org/com.wsscode/pathom3
• Add support for ::pco/batch-chunk-size to control how many items to batch at once
• Batch process retains input order when making batch calls
New docs for the batch chunk feature: https://pathom3.wsscode.com/docs/resolvers/#batch-in-chunks
Also new section about batch in parallel: https://pathom3.wsscode.com/docs/resolvers/#batch-in-parallel-processor#2022-03-0709:46oliyAnnouncing fixa - better test fixtures
https://github.com/oliyh/fixa
Why does clojure.test limit us to a single set of :each and :once fixtures for all tests in a namespace?
Shouldn't we have the granularity of being able to apply particular fixtures to an individual test?
fixa lets you define fixtures at the individual test level using a simple metadata notation.
(deftest ^{:fixa/fixtures [fixture-a fixture-b]} multiple-fixtures-test
(is (= 1 1)))
You can use it with clojure.test and kaocha runners, see the readme for details.
Any feedback welcome!#2022-03-0717:01bozhidarCIDER 1.3 ("Ukraine") is out! More details - https://github.com/clojure-emacs/cider/releases/tag/v1.3.0#2022-03-0717:28craftybonesHope your family is doing well @U051BLM8F#2022-03-0718:21bozhidarThanks! So far they are still safe.#2022-03-0718:51AndriiThanks for the support!#2022-03-0812:40kinleydWonderful release name. Slava Ukraini. :flag-ua:#2022-03-1311:38fmnoisethank you for support @U051BLM8F :flag-ua:#2022-03-0721:58Jakub Holý (HolyJak)Announcing the first alpha release of the https://github.com/cljdoc/cljdoc-check-actionhttps://github.com/cljdoc/cljdoc-check-action (v0.0.3) that runs CljDoc analysis on your project and fails if that fails - to make sure that you do not publish a version that http://cljdoc.org will not be able to import. Using it can be as simple as
# build your target/*.jar
- name: Check CljDoc
uses: cljdoc/
- see the README for details. Many thanks to @lee and his indispensable help!
This is an alpha release. It seems to be working but e.g. I have not tested it on a broken project. Please try it out and report any problems! 🙏 #2022-03-0722:00ericdallooh, that's very handy!#2022-03-0722:02Jakub Holý (HolyJak)I hope so!#2022-03-0722:57vemvMuch useful! Was thinking of requesting the same upstream :)#2022-03-0723:16lreadAnd we’ll likely eventually add more checks. Like a decent doc/cljdoc.edn linter.#2022-03-0809:13mpenetnew https://github.com/exoscale/ex release (0.4.0) - removed validation of ex-data contents in ex/try+ and ex/ex-info#2022-03-0814:44Alex Miller (Clojure team)Have you filled out the 2022 State of Clojure survey yet? If not, please do! https://www.surveymonkey.com/r/clojure2022#2022-03-0909:47borkdudeobb v0.0.3 released:
Ad-hoc ClojureScript scripting of Mac applications via Apple's Open Scripting Architecture.
https://github.com/babashka/obb/blob/main/CHANGELOG.md#003---2022-03-09
channel: #obb#2022-03-0918:40Grant Horneryou are an absolute machine#2022-03-0921:30Mnooh boy better get started on that new logo kappa#2022-03-0919:51blueberryNew release 0.22.0
https://github.com/uncomplicate/deep-diamond#2022-03-1015:55Alex Miller (Clojure team)just a reminder, tomorrow is the last day for the annual Clojure survey and we'd appreciate your response if you haven't completed it yet! https://www.surveymonkey.com/r/clojure2022#2022-03-1018:09HuahaiDatalevin 0.6.0 is released. This is a major release with the addition of a full-text search engine, as well as a number of other improvements. Please note that data migration may be needed to upgrade to this release. https://github.com/juji-io/datalevin#2022-03-1018:19Cora (she/her)congrats! this is awesome!!#2022-03-1110:08plexusWe've released cljbox2d, an idiomatic Clojure/ClojureScript wrapper for the jBox2D/Planck.js physics engines, with some helpers to combine it with Quil. See the README for how to run the demos. Documentation is still a bit sparse but there's example code to start from. Happy to answer questions in #quil https://github.com/lambdaisland/cljbox2d#2022-03-1110:09plexusTry it at home:
clojure -Sdeps '{:deps {com.lambdaisland/cljbox2d {:mvn/version "0.4.19"} quil/quil {:mvn/version "4.0.0-SNAPSHOT"}}}' -M -m lambdaisland.cljbox2d.demo.simple-shapes#2022-03-1110:17plexus#2022-03-1113:09Noah BogartThis is so cool! #2022-03-1115:21plexus@U1EP3BZ3Q also demonstrated how to use it with Clojure2D! https://github.com/Clojure2D/clojure2d-examples/tree/master/src/box2d#2022-03-1409:42BorisKourtLove seeing the ecosystem grow like this : )#2022-03-1118:52Daniel SlutskyFollowing our discussion at #visual-tools meeting 3 (the video will be public soon), here is an experiment combining Portal, Clerk, Kindly, and nREPL in one flow.
It demonstrates using one Clojure namespace and comfortably visualizing it in different tools (Portal and Clerk in this case), without any need of code change.
https://github.com/scicloj/visual-tools-experiments/tree/main/portal-clerk-kindly-nrepl-1#2022-03-1119:06flowthingLooks interesting! The link to Kindly is dead, though.#2022-03-1119:15Daniel Slutskyfixed, thanks 🙏#2022-03-1119:42Daniel Slutsky(fixed, forgot it was a private repo) 🙏#2022-03-1317:42Daniel SlutskyAdded a video to clarify the experiment: https://www.youtube.com/watch?v=e3M4u1XIVTo#2022-03-1121:25Alex Miller (Clojure team)https://github.com/clojure/tools.build v0.8.1 is now available
• compile-clj - TBUILD-29 - add support for setting bindings during compilation#2022-03-1121:29Noah BogartHot damn! What a quick turn around. Thanks Alex! #2022-03-1122:06borkdudeI guess this allows something to check
*warn-on-reflection*
stuff globally too :)#2022-03-1214:53mkvlrthank you for this!#2022-03-1319:30borkdudeBabashka 0.7.8!
This release improves compatibility with several libraries: https://github.com/aysylu/loom, https://www.hugsql.org/ and https://github.com/redplanetlabs/specter!
To use specter in babashka, use the following coordinates:
{:deps {com.rpl/specter {:git/url ""
:git/sha "8ba809a2cd35d3b6f8c5287e6bd3b4e06e42f6dc"}}}
Hopefully the compatibility commit can be upstreamed back into specter at some point.
• Add clojure.data.priority-map as built-in library - this makes babashka compatible with https://github.com/aysylu/loom
• Add part of clojure.tools.reader.reader-types to support https://www.hugsql.org/
• https://github.com/babashka/babashka/issues/1204 add property babashka.config to reflect bb.edn location (https://github.com/mknoszlig)
• Several fixes and enhancements to run Red Planet Lab's https://github.com/borkdude/specter/commit/8ba809a2cd35d3b6f8c5287e6bd3b4e06e42f6dc library in babashka
• https://github.com/babashka/babashka/issues/1199: support print-method impls on records
• babashka.fs: add windows? predicate
• SCI: add *clojure-version* and (clojure-version)
• Add java.util.zip.Deflater and java.util.zip.DeflaterOutputStream
• SCI: implement declare as macro
• https://github.com/babashka/babashka/issues/938: drop location metadata from symbols, except top level
Full changelogs: https://github.com/babashka/babashka/blob/master/CHANGELOG.md
Channel: #babashka#2022-03-1412:44borkdudeGrasp: grep Clojure code using clojure.spec regexes
Version 0.0.3 is out, the first release after a long time.
JVM library:
io.github.borkdude/grasp {:mvn/version "0.0.3"}
Binaries are now released to Github releases.
Also new in v0.0.3:
:keep-fn (fn [{:keys [spec expr uri]}] ...)
can be used to determine the result shape and save conformed values. Thanks to @mkvlr.
https://github.com/borkdude/grasp
Channel: #grasp#2022-03-1413:20mkvlrhttps://github.com/borkdude/grasp#depsedn might want a bump still#2022-03-1413:21borkdudedone#2022-03-1508:24Vincent CantinA tiny (~50 LOC) cross-platform CLJC library which parses html into an AST, and then converts it to hiccup. A very good starting point for any html hacking (easy to fork and edit).
https://github.com/green-coder/html-to-hiccup#2022-03-1512:25Noah BogartI saw you post the gist on Twitter. Glad you turned it into a full library! #2022-03-1512:26Vincent CantinThx. I think a library makes it easier to maintain and link to it.#2022-03-1512:27Vincent CantinThe lib has a place for automated tests as well.#2022-03-1610:55rickmoynihanThis looks great 👏
Presumably the parser is much more strict on well formedness than html5 and browsers?
Regardless this looks very useful!#2022-03-1713:44Vincent CantinI would say that it is less strict than the browser. For example, there is no check that a closing element has the same tag as its opening element. The parser is not supposed to be used to validate html, just to convert it when it is assumed to be correct.#2022-03-1713:46Vincent CantinBy the way, I released the version 0.1.3 with the new helper function minify-hiccup. To know how it works, see its unit tests.#2022-04-1604:25Cora (she/her)also maybe useful for the same thing is hickory, I think?#2022-04-1805:48Vincent CantinHickory in CLJS nequires the DOM nodes of a browser for the parsing. This one doesn't.#2022-04-1807:27Cora (she/her)oh!! very excellent point!!#2022-03-1601:34pfeodrippeAnnouncing the first release of Dinâmico (v0.0.6).
Program a mobile app using Clojure (backend) with Flutter (boilerplate included) as the presentation layer.
• Reified (oh no, that word again) functions for easy lookup of parameters
◦ (-dn/doc dn/decorated-box :decoration :boxShadow :blurStyle) ;; => [:schema {:registry {}} [:enum :inner :normal :outer :solid]]
• Malli schemas automatically derived (amazonica-like)
◦ The library is a thin wrapper over https://pub.dev/packages/json_dynamic_widget where the json schemas are fetched from
• Hot reload using your usual code environment (the thin layer in Dart just has to pull data regularly while in development)
https://github.com/pfeodrippe/dinamico#2022-03-1605:52pezThis is mind blowing. I must play with it!#2022-03-1610:46borkdudeIf you want to ship your Clojure backend code to your mobile, you might also be able to use this approach:
https://gist.github.com/ericnormand/aefbaace9b3731b26dd4dff770565271#2022-03-1611:09pfeodrippeNice one, @U04V15CAJ!#2022-03-1619:46Dumch@U5R6XUARE, do you have some example app?
I wonder how to model complex ui with this approach, how handle clicks#2022-03-1619:50pfeodrippe@UL05W6AEM Take a look at https://pub.dev/packages/json_dynamic_widget, it has a concept of registry which you can use for it. Dinâmico just returns a map which json_dynamic_widget understands o/#2022-03-1612:43mpenetnew https://github.com/exoscale/coax release (record coercion related bugfix)#2022-03-1614:19Sam RitchieHey all! I’ll be giving three talks in Portugal next week, all of which will be streaming online. I’d love if you’d come watch!
At the https://european-lisp-symposium.org/2022/index.html: “Building SICMUtils, the Atelier of Abstractions” and a keynote, “Lisp as Renaissance Workshop: A Lispy Tour through Mathematical Physics”,
and at <https://2022.programming-conference.org/%7C<programming> 2022>, https://2022.programming-conference.org/details/programming-2022-Keynotes/3/The-Road-to-Reality-Interactive-Physics-from-Eval-to-Einstein
Expect lots of Clojure pitching and love, and discussion of #sci, #sicmutils, #clerk, #clojurescript, #visual-tools and some horn-tooting about how great our community feels to be a part of.#2022-03-2317:31Sam RitchieTwo down, one to go! Talks and slides posted here: https://clojurians.slack.com/archives/C8NUSGWG6/p1648056352518449#2022-04-1122:58Darrick WiebeHey! Do you know if any of your talks will appear on youtube or be otherwise available to watch later?#2022-04-1417:17Sam Ritchie@U01D37REZHP just seeing this, yes, two are available and the third was similar enough to the first that you won't miss much #2022-04-1417:18Sam RitchieHere are the links: https://clojurians.slack.com/archives/C8NUSGWG6/p1648056352518449#2022-04-1417:18Sam RitchieThanks for asking!!#2022-04-1418:10Darrick WiebePerhaps I'm missing something since I don't normally use Twitch, but both of the video links appear to be dead.#2022-04-1418:11Sam RitchieOh no! I didn't realize. I'll see what I can find out about how to get those back up, or where the links will live. Sorry; didn't click them to test myself #2022-04-1418:14Darrick WiebeHope you can find them!! 🙂#2022-03-1712:54genmeblogWadogo scales - Clojure implementation of d3 scales. I've just released documented version of the library. It's still SNAPSHOT (depends on snapshot version of fastmath), but can be treated as a beta. https://github.com/scicloj/wadogo
Documentation is created with #clerk https://scicloj.github.io/wadogo/index.html#2022-03-1713:06fmnoiseHi everyone! https://github.com/fmnoise/flow is released. No much additions, but rather some code cleanup as well as fixes to documentation and examples (thanks to @onetom for that).#2022-03-1715:12Noah BogartI’ve not seen this before, it looks cool as hell! #2022-03-1716:02Joshua Suskalowould highly recommend! flow is fantastic#2022-03-1717:50slimslenderslacksJust created a new https://github.com/atomisthq/jibbit - here's the https://github.com/atomisthq/jibbit/blob/main/CHANGELOG.md - some bug fixing (thanks @kolstae) and starting to look at supporting a https://skaffold.dev/docs/ for clojure applications running on kubernetes (thanks @mruzekw).#2022-03-1720:42borkdude#nbb, scripting for Clojure on Node.js via SCI, v0.2.8 is out
Major new additions since v0.1.6:
• REPL auto-complete implementation. See demo in Calva https://twitter.com/borkdude/status/1504556504116047877
• Improvements around promises: https://github.com/funcool/promesa has new macros and an experimental top level nbb.core/await function to ease exploring async code in the REPL.
Try it out on your system with:
npx
Full changelogs:
https://github.com/babashka/nbb/blob/main/CHANGELOG.md
If you want to hear more about #nbb, next week I'm giving a talk about it at London Clojurians!
https://www.meetup.com/en-AU/London-Clojurians/events/282138836/#2022-03-1817:49borkdudeSpecter 1.1.4
https://github.com/redplanetlabs/specter/blob/master/CHANGES.md#114
Thanks @nathanmarz#2022-03-1818:09borkdudeThis release, among other things, adds compatibility with babashka:
(require '[babashka.deps :as deps])
(deps/add-deps '{:deps {com.rpl/specter {:mvn/version "1.1.4"}}})
(require '[com.rpl.specter :as s])
(s/transform [(s/walker number?) odd?] inc {:a 1 :b [1 2 3]}) ;;=> {:a 2, :b [2 2 4]}#2022-03-1818:19slimslenderslacksThis is very exciting - two awesome tools, and now together!#2022-03-1821:10wilkerlucioany plans to make something like this for #meander? would really love that 🙂#2022-03-1821:17borkdude@U066U8JQJ with specter I was able to make it run without big changes. with meander, I think I will run into the same issues as with pathom: custom data structures that implement a ton of Java interfaces#2022-03-1821:19wilkerluciogotcha, I remember the new version they are making has less of that, maybe this will be the one to work with Babashka#2022-03-1821:19wilkerluciobut Pathom, besides the smart maps, everything else already works on Babashka 🙂#2022-03-1821:20borkdudealways worth a shot :)#2022-03-1821:32borkdudeApart from a reflection issue (.indexOf ...) the meander.match.epsilon namespace seems to load.
$ clojure -M:babashka/dev -cp src -e "(require '[meander.match.epsilon])"
#2022-03-1821:33borkdude(require '[meander.match.syntax.epsilon])
also works#2022-03-1821:33borkdude(require '[meander.rewrite.epsilon])
also works#2022-03-1821:36borkdude@U066U8JQJ It seems all necessary namespaces for meander.epsilon load, I just get one error in the ns itself, will look into it.#2022-03-1821:36borkdudeWe can take the discussion elsewhere maybe.#2022-03-1821:43borkdude@U066U8JQJ Wow, it works, if I comment out defsyntax with !
$ clojure -M:babashka/dev -cp src -e "(require '[meander.epsilon :as m])
dquote>
dquote>
dquote> (defn favorite-food-info [foods-by-name user]
(m/match {:user user
:foods-by-name foods-by-name}
{:user
{:name ?name
:favorite-food {:name ?food}}
:foods-by-name {?food {:popularity ?popularity
:calories ?calories}}}
{:name ?name
:favorite {:food ?food
:popularity ?popularity
:calories ?calories}}))
dquote>
dquote> (def foods-by-name
{:nachos {:popularity :high
:calories :lots}
:smoothie {:popularity :high
:calories :less}})
(favorite-food-info foods-by-name
{:name :alice
:favorite-food {:name :nachos}})"
{:name :alice, :favorite {:food :nachos, :popularity :high, :calories :lots}}#2022-03-1821:44wilkerlucio:star-struck:#2022-03-1821:44wilkerluciowow, that's awesome, Meander is one of libs that I miss the most when using Babashka#2022-03-1821:46wilkerluciolong way, seems like all the fixes for other things are almost making Meander works 🙂 @U5K8NTHEZ @U06MDAPTP#2022-03-1821:49jimmyAll credit to @U06MDAPTP#2022-03-1822:18borkdudeGoing to dig into why this error with defsyntax with happens (unresolved symbol, some gensym) but it seems promising. :-D#2022-03-1822:41borkdudeFound the issue#2022-03-1823:15borkdudeI'm hitting a couple of reflection issues. E.g. .without on clojure.lang.IPersistentMap etc, gotta add those in bb explicitly#2022-03-1823:16borkdudenot sure why that low level interop is necessary, small perf gain?#2022-03-1823:16borkdude(in bb it will be much slower)#2022-03-1823:20borkdudebut I'll try to support it so meander doesn't have to change anything#2022-03-1823:26borkdude@U066U8JQJ I pushed a commit which makes the above example work. Binary will be in #babashka-circleci-builds in 10 minutes or so. Probably needs more testing, will do so tomorrow. This is really cool!#2022-03-1823:40borkdudebash <(curl ) --version 0.7.9-SNAPSHOT --dir .
(require '[babashka.deps :as deps])
(deps/add-deps '{:deps {meander/epsilon {:mvn/version "0.0.650"}}})
(require '[meander.epsilon :as m])
(m/find [1 2] [?x ?y] ?y [?x ?y ?z] ?y) ;;=> 2
The good news is that it works. The bad news is that the loading of the lib takes quite long due to the amount of code.#2022-03-1823:51wilkerlucioyou rock man! I'm in the middle of a thing from work today, but I'll be happy to test it next week 🙂#2022-03-1914:08borkdude@U066U8JQJ I invited you to #babashka-sci-dev - let's continue there. There are a couple of things like r/gather which result in unexhaustive matches.#2022-03-1823:30jacob.mainehttps://github.com/mainej/re-stated 0.2.25
Small but flexible tool for managing clj-statecharts state machines within a re-frame app.
Comes with many examples where state machines can simplify a domain:
• tracking status of HTTP requests
• navigating wizards
• recording input field interaction history#2022-03-1823:38p-himikAlright, this is now a fourth library that I know of that adds statechart to re-frame. Seems like I should finally give statecharts a go. :D
If anyone's interested, the other libraries (apart from clj-statecharts built-in re-frame integration) are:
• https://github.com/jiangts/re-state
• https://github.com/MaximGB/re-state
• https://github.com/ingesolvoll/re-statecharts#2022-03-1900:36jacob.maine@U2FRKM4TW that’s right, there are a ton of options! You haven’t even touched on https://github.com/fulcrologic/statecharts, or any of the many other state machine libraries and their re-frame integrations. I’m partial to re-stated because:
• it’s small—70 loc, no macros
• it comes with lots of docs and examples
• and it doesn’t try to be The Way to Structure Your App; it’s just a thin adapter between re-frame and clj-statecharts#2022-03-1900:44Carsten Behringhttps://clojars.org/clj-py-r-template/clj-template 1.7.0
Polyglot clj template with python, R and others working out-of-the-box with Docker
Changes in 1.7.0:
• libraries upgraded
• Clerk added#2022-03-2009:12Sam Ritchiev0.22.0 of the #sicmutils computer algebra system is out. The main highlight is that compiled functions are now 10x or so faster, thanks to me getting out of the way of Clojure’s numerical optimizations. Whoops!
• Clojars: https://clojars.org/sicmutils/sicmutils
• detailed release notes: https://github.com/sicmutils/sicmutils/releases/tag/v0.22.0
• Physics demos powered by #clerk, Mathbox and #sicmutils: https://twitter.com/sritchie/status/1503220063264026629
This release is prep for a series of talks in Portugal that use #sicmutils for slide generation and in a bunch of interactive demos with #clerk. That code lives here if you want to play: https://github.com/sritchie/programming-2022
Cheers!#2022-03-2106:45Matthew Davidson (kingmob)After 4 years since the last major update, Aleph 0.4.7 is now available, containing many lovely bug fixes and updated dependencies! https://clojars.org/aleph/versions/0.4.7#2022-03-2110:02borkdudeExcellent! Thank you!
For completeness, here are the changelogs:
https://github.com/clj-commons/aleph/blob/master/CHANGES.md#047#2022-03-2112:03Matthew Davidson (kingmob)Thx, borkdude!#2022-03-2122:21Hugh PowellHell yes! Thankyou 🙂. We've had issues with Aleph 0.4.6 and the AWS SSO libraries. This should fix that :thumbsup:#2022-03-2203:12Matthew Davidson (kingmob)@UB2GLDEN8 Did you try any of the alpha releases over the years?
I don't recall any commits specifically relating to AWS SSO, so please let us know on GH if there are still issues. #2022-03-2203:14Hugh PowellYeah, the latest alpha releases were looking good. I'll open GH issues if we run into anything as we upgrade.#2022-03-2203:14Hugh PowellIt was mostly to do with mis-matched versions of netty I think.#2022-03-2203:27Matthew Davidson (kingmob)Hmmm. I’m planning to give it a week or so, then we’ll bump up Netty to the latest version. It’s still a bit behind#2022-03-2118:19fogus (Clojure Team)New Cognitect Labs aws-api service APIs available!
CHANGES
- new endpoints version 1.1.12.181
- Updated services versions v820.2.1083.0 and v820.2.1096.0 pushed
- new AWS service APIs available: billingconductor, keyspaces
README: https://github.com/cognitect-labs/aws-api/
API Docs: https://cognitect-labs.github.io/aws-api/
Changelog: https://github.com/cognitect-labs/aws-api/blob/master/CHANGES.md
Upgrade Notes: https://github.com/cognitect-labs/aws-api/blob/master/UPGRADE.md
Latest Releases of api, endpoints, and all services: https://github.com/cognitect-labs/aws-api/blob/master/latest-releases.edn#2022-03-2118:29javahippieWe have just published a very, very early first release of a Testcontainers plugin for kaocha https://github.com/lambdaschmiede/kaocha-testcontainers-plugin#2022-03-2119:17richiardiandreawow this is great, I have got a ton of code around it that might go away thanks to this thank you! 😅#2022-03-2119:57javahippieGreat to hear! It’s still early, we use it in our own applications, but I’d be happy to get your thoughts and feedback on this!#2022-03-2120:00richiardiandreaYeah we should sync one day, I'll have to compile the list of quirks and workarounds I had to go through at some point 😄#2022-03-2214:40practicalli-johnhttps://github.com/practicalli/clojure-deps-edn user level aliases to add community tools to Clojure CLI across all your deps.edn projects
• added https://github.com/practicalli/clojure-deps-edn#development-environment, providing more tools for REPL driven development
◦ :env/dev - add dev directory to class path - e.g. include dev/user.clj to https://practical.li/clojure/clojure-cli/projects/configure-repl-startup.html
◦ :lib/nrepl include nrepl as a library
◦ :lib/hotload - include org.clojure/tools.deps.alpha add-libs commit to https://practical.li/clojure/alternative-tools/clojure-cli/hotload-libraries.html
◦ :lib/tools-ns - include org.clojure/tools.namespace to refresh the current namespace in a running REPL
◦ :lib/reloaded - combination of hotload and tools-ns aliases
◦ :lib/pretty-errors - highlight important aspects of error stack trace using ANSI formatting
• added https://github.com/practicalli/clojure-deps-edn#searching (moved existing search related aliases to :search category)
◦ -M:search/errors https://github.com/athos/clj-check.git - search each namespace and report compilation warnings and errors
◦ -M::search/unused-vars https://github.com/borkdude/carve - search code for unused vars and remove them - optionally specifying paths --opts '{:paths ["src" "test"]}'
◦ -M:search/libraries - https://github.com/hagmonk/find-deps - fuzzy search Maven & Clojars and add deps to deps.edn
◦ -T:search/outdated - https://github.com/liquidz/antq - check for newer versions of libraries, updating deps.edn if :update true passed as argument#2022-03-2215:55ambrosebsTutorials for using dependabot with https://github.com/frenchy64/dependabot-lein-via-mvn and https://github.com/frenchy64/dependabot-clojure-cli-via-mvn via Maven.#2022-03-2216:19Alex Miller (Clojure team)Clojure 1.11 is now available! https://clojure.org/news/2022/03/22/clojure-1-11-0#2022-03-2216:25pezThanks for improving my fav programming language! Wonderful to see all those community names among the contributors.#2022-03-2216:27match37Thank you! @U064X3EF3#2022-03-2216:28dharriganSeconded and thirded and fourthed....#2022-03-2217:41richiardiandreaThank you, exciting to see these new language features!#2022-03-2217:56Cora (she/her)yessss! very excited for all of this!!#2022-03-2218:00Cora (she/her)I'm guessing it's still being rolled out to all the installation sources?#2022-03-2218:04Alex Miller (Clojure team)there's only one source, and it's there#2022-03-2218:04Alex Miller (Clojure team)if you're asking about the Clojure CLI, that number will be bumped on the next release, which should be within the next week or so#2022-03-2218:05Alex Miller (Clojure team)the Clojure CLI version is independent of the Clojure version used in a project though (any version of the CLI can use any version of the language), it just affects what the default version you get is if you don't specify#2022-03-2218:10slipsetIn production#2022-03-2218:17Cora (she/her)yep, I meant the CLI version. thanks!#2022-03-2311:03rickmoynihanFantastic to see this out the door; some solid improvements!#2022-03-2221:24ribelorailway oriented programming for clojure & clojurescript, a functional approach to error handling.
https://cljdoc.org/d/com.github.ribelo/fatum/0.0.20/doc/readme#2022-03-2308:39pezCalva, the beginner friendly Clojure IDE for VS Code, just updated. v2.0.257 changes:
• Maintenance: https://github.com/BetterThanTomorrow/calva/pull/1605https://github.com/BetterThanTomorrow/calva/pull/1605https://github.com/BetterThanTomorrow/calva/pull/1605
• https://github.com/BetterThanTomorrow/calva/issues/1254
• Fix: https://github.com/BetterThanTomorrow/calva/issues/1610
The most visible change is a more convenient Ux for connecting the REPL in monorepos, #polylith, etcetera.
https://user-images.githubusercontent.com/30010/159653688-d59748a3-847f-499d-aa1f-d0343b70d11d.png
Contributors: @corasaurus-hex, @brandon.ringe and I (me?)#2022-03-2312:47Daniel JompheThanks!
It solves an issue we had. We don't have a monorepo (only one deps.edn), but we have multiple source trees. If we were in one of the dev alias' extra-paths, Calva didn't start the right thing until now. 🙂#2022-03-2312:54pezThanks for the feedback, @U0514DPR7! That situation sounds similar to what you have in a #polylith project.#2022-03-2313:51Jakub Holý (HolyJak)Awesome, thank you for your relentless work, @U0ETXRFEW!#2022-03-2316:13pezHere's a demo. https://www.youtube.com/watch?v=6Ba7c_MxT1E#2022-03-2514:59Alex Miller (Clojure team)should this have been 2.0.257 ?#2022-03-2515:15pezYes, thanks! Now fixed.#2022-03-2403:42Jon OlickProgress on jo_lisp https://github.com/Zelex/jo_lisp is going nicely. Still not near a 1.0 release, but definitely making dents on it feature parity. 1.0 will be near feature parity or full feature parity.#2022-03-2405:03Lucy WangHi there, clj-statecharts, the state machine and statecharts library for clojure/clojurescript, has released 0.1.3, which introduces the concept of "stores" as state containers (thanks to @jacob.maine's amazing contribution!)
https://github.com/lucywang000/clj-statecharts
Relevant changelog:
## v0.1.3 2022/3/17
- Structure scheduler to interoperate with data stores #10 (thanks to @mainej)
#2022-03-2814:49match37Does clj-statecharts support wildcard event? https://xstate.js.org/docs/guides/transitions.html#wildcard-descriptors#2022-03-2413:46Ivar RefsdalHi! Here is https://github.com/ivarref/healthy, a tiny library to simplify writing health checks.
It provides a "sliding window" into your application's errors, allowing you to see if it recovers or not once an error has occured.
Hope it is useful for someone. 😊#2022-03-2415:20nateHello everyone! Announcing the first open source release of Lighthouse, a data-driven Kubernetes pre-processor. Lighthouse merges EDN files in a directory tree with simple inheritance rules (along with access to Clojure via #sci), generating manifests in a flexible and reliable manner.
Repo: https://github.com/barracudanetworks/lighthouse#2022-03-2419:04borkdudeNice! Added here: https://github.com/babashka/sci#projects-using-sci#2022-03-2419:35nateThank you!#2022-03-2509:06mdallastellaCan I get rid of Helm with this?#2022-03-2513:56Darin Douglassyep! if a 3rd party app still recommends using helm charts that’s what we chose to use. but for our own stuff we wrote lighthouse files instead#2022-03-2522:52leifericfCool! Fun coincidence: Today, I listened to episode 74 of your podcast, where you (@U0510902N and @U5FV4MJHG) were talking about deployment. Kubernetes (and YAML) was mentioned on several occasions. Then I see this post 😊#2022-03-2523:02neumann@U01PE7630AC Nice timing! Less YAML means happier me.#2022-03-2416:05cldwalkerHey! Announcing an initial release of lq, a commandline tool for querying logseq's knowledge graphs with datalog - https://github.com/cldwalker/logseq-query. Y'all will probably appreciate users can extend the tool's querying capabilities with EDN. datascript and babashka are an awesome match 🙂#2022-03-2513:24Adam HelinsLooks really awesome! As an avid logseq power user, I'm eager to try it out#2022-03-2523:37genmeblogFastmath 2.1.8 released. This release solves the issue with abs introduced in Clojure 1.11 (https://ask.clojure.org/index.php/11672/fastmath-errors-in-1-11) + some other minor bugs. Please do not use 2.1.7 version (deployed too early). Thanks @alexmiller for bringing this to my attention. https://github.com/generateme/fastmath#2022-03-2523:48genmeblogAlso, Clojure2d 1.4.4 is released (depends on fastmath). This version brings shape abstraction and contains revisited and updated clojure2d.color namespace. Please refer #clerk https://clojure2d.github.io/clojure2d/docs/notebooks/index.html#/notebooks/color.clj for a full reference. I believe this namespace covers almost everything needed for color operations (it can be used in #quil too, see https://clojure2d.github.io/clojure2d/docs/codox/clojure2d.color.html#var-quil ). Enjoy! https://github.com/Clojure2D/clojure2d#2022-03-2611:16javahippieWe release version 0.6.0 of clj-test-containers. It now supports all wait strategies that Testcontainers for Java supports, and we added a new configuration to specify a startup-timneout for every wait strategy. Also, you can now define a Clojure function which gets called every time there is a new log line in the started Docker container and we added in-detail documentation for the log- and wait-strategies.
https://github.com/javahippie/clj-test-containers/releases/tag/0.6.0#2022-03-2614:52ericdalloclojure-lsp Released https://clojure-lsp.io/ 2022.03.25-12.02.59 with lots of improvements and a new Find implementations of feature!
We had huge performance improvements on startup and cpu cost, multiple fixes and improvements on a lot of exisiting features and even new code actions!
For more information, check #lsp#2022-03-2709:40Jakub Holý (HolyJak)Awesome with the defmulti impls! Just what I need!#2022-03-2615:40oxalorg (Mitesh)Hey all 🌸, never really posted updates about https://github.com/oxalorg/4ever-clojure here.
The project is alive and kicking 💪 thanks to the awesome contributors: @borkdude, wooseopkim, sjongejongejonge, @porkostomus, @pradeep.bishnoi, pengx17, @humorless279 and many more!
Recently we've made a lot of fixes and changes: deduped solutions, fixed some crazy SCI related stuff around infinite ranges, improved error stacktraces, enabled gzip and other perf improvements, fixed edge cased input field bugs, improved design, and more!
Full changelog is available here: https://github.com/oxalorg/4ever-clojure/blob/main/CHANGELOG.md#2022-03-2621:08cheelHi All,
Just released version 0.0.1 of a new graphics library for Clojure https://github.com/rorokimdim/mindra-clj
Only 2D, fairly primitive, with only a small set of features. But I hope to build on it more. Some examples of what is already possible is in the README.
Thanks!#2022-03-2621:11cheeland big kudos to @borkdude for babashka/process . I'm glad i didn't need to figure it out myself#2022-03-2700:58uochanJust released Dad ver 1.0.0, Small configuration management tool for Clojure.
There are some breaking changes, but added support for babashka pods.
These changes should make you less complicated to remember and easier to use ☺️
https://github.com/liquidz/dad#2022-03-2810:28Jakub Holý (HolyJak)It is awesome that Dad can be used as a pod. Now I only need to have #babashka installed. Will certainly check it out!#2022-03-2704:34ambrosebsTyped Clojure can reuse your malli schemas and spec1 specs as static types.
• https://www.patreon.com/posts/static-type-64236939
• https://www.patreon.com/posts/64321657 #2022-03-2717:33mruzekwI'm guessing this includes specs beyond type-only checks?#2022-03-2722:53ambrosebs@U1RCQD0UE the restriction is that the spec must be mapped to a type that Typed Clojure supports. TBD how big a subset of specs that is in practice.#2022-03-2722:55ambrosebsbut potentially eg., s/keys => t/HMap, s/fspec => t/IFn . I'll be filling out more conversions, but right now the proof-of-concept only supports s/fspec + int?.#2022-03-2723:43mruzekwGot it. Thanks!#2022-03-2802:43eggsyntaxThat's awesome! 👏#2022-03-2802:36phronmophobicTryit: Create cli snippets for quickly trying clojure libraries.
For example, if you wanted to try Tryit to get people to try Tryit, just try the following from terminal:
$ clj -Sdeps {:deps\ {com.phronemophobic/tryit\ {:mvn/version\ \"1.1\"}}} -X com.phronemophobic.tryit/exec
deps: {com.phronemophobic/tryit {:mvn/version "1.1"}}
f: com.phronemophobic.tryit/exec
clj -Sdeps {:deps\ {com.phronemophobic/tryit\ {:mvn/version\ \"1.1\"}}} -X com.phronemophobic.tryit/exec
https://github.com/phronmophobic/tryit#2022-03-2810:21Jakub Holý (HolyJak)so it essentially builds the clj command you need to execute to try the target library, right?#2022-03-2805:52eskoslein-git-revisions v1.0.0
> Automatically control, modify and adjust Leiningen project version based on metadata.
• Automatically adjust Leiningen project revision string with custom data-oriented DSL
• Supports several versioning schemes: https://github.com/esuomi/lein-git-revisions/blob/v1.0.0/semver.org, https://calver.org/, https://github.com/ptaoussanis/encore/blob/master/BREAK-VERSIONING.md, Git hashes, other metadata and more!
• Adjusting the revision is based on easily automatable metadata such as environment variables
• 100% hands-free for developers
• Output revision metadata to file for further consumption
For examples how to use with CI the project is self-recursive, so its GitHub Actions uses itself to release new versions of the plugin.
Badges at top of README for clojars links etc.
https://github.com/esuomi/lein-git-revisions#2022-03-2813:48Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.11.0.1100 is now available (maybe I should have released this at 11:11)
• Default to Clojure 1.11.0 if no Clojure version is specified
• https://clojure.atlassian.net/browse/TDEPS-135 Fix concurrency issues in Maven artifact downloads#2022-03-2815:57oxalorg (Mitesh)For those on mac
brew upgrade clojure/tools/clojure
#2022-03-2816:51littleliFor those on Windows (using scoop installer)
scoop update clojure
#2022-03-2901:28ahungryArch Linux is already up to date with it - arch users: pacman -Sy clojure#2022-03-2908:06vemvnvd-clojure - security checker - https://github.com/rm-hull/nvd-clojure/blob/v2.4.0/CHANGELOG.md#changes-from-230-to-240
Now it uses the 7.x https://github.com/jeremylong/DependencyCheck/ series. Also new: performance and reporting improvements.
Enjoy!#2022-03-2908:45jumarLooks very interesting, thanks!
I've just tried it on a project that still uses JDK 8 and got this error:
lein with-profile -user run -m nvd.task.check "" "$(lein with-profile -user,-dev classpath)"
...
Exception in thread "main" Syntax error macroexpanding at (ring/adapter/jetty.clj:1:1).
at clojure.lang.Compiler.load(Compiler.java:7665)
...
Caused by: java.lang.UnsupportedClassVersionError: org/eclipse/jetty/util/Attributes has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0#2022-03-2908:51vemvnote that nvd-clojure does not involve requiring ring.adapter.jetty , that would be at least part of your problem
are you running nvd-clojure in its own isolated project as the readme says?
other than that our CI matrix has JDK8/11/17 in it#2022-03-2909:01jumarAh no, I'm not running it like that - I though it's just an example while it seems it's a prerequisite.
Let me try that#2022-03-2909:15jumarIt works great, thanks!#2022-03-2909:18vemvCheers 🍻 hope you can make great use of it!#2022-03-2912:10Ivar Refsdalhttps://github.com/ivarref/yoltq, an on-prem queue library for Datomic that supports retries, backoff, ordering and more, is released with version 0.2.55!
This version includes a critical bugfix. The bug could lead to stalled jobs in some cases.
There are other small changes documented in the https://github.com/ivarref/yoltq#change-log.#2022-03-3000:58phronmophobicDewey: Index of Clojure libraries available on github.
Ever wanted to know what clojure libraries were available on github as git dependencies? Get the list as data or query it yourself with Dewey.
data: https://github.com/phronmophobic/dewey/releases
code: https://github.com/phronmophobic/dewey#2022-03-3008:22pezVery cool! VS Code struggles with that the whole thing is on one line though. Even zprint seems to struggle with it. It's not finished even though I pressed return several minutes ago. 😃#2022-03-3017:24phronmophobicInteresting. I hadn't thought about making the data format more editor friendly. I'm definitely open to using more convenient formats or including more/less data to make it easier for consumers.
I know https://github.com/clojars/clojars-web/wiki/Data#useful-extracts-from-the-poms line delimited edn for their dataset of libraries. Maybe that's a more convenient format?#2022-03-3017:27phronmophobicall the .edn files can currently be read using something like:
(require '[ :as io]
'[clojure.edn :as edn])
(defn read-edn [fname]
(with-open [rdr (io/reader fname)
rdr (java.io.PushbackReader. rdr)]
(edn/read rdr)))#2022-03-3008:02Dumchhttps://github.com/Liverm0r/robot - 0.2 released. A clj library to simplify java.awt.robot usage to manipulate desktop.
Now there is an ability to get info about your keyboard.
(r/get-my-keyboard)
;; =>
{3 "⎋", 8 "⌫", 9 "⇥", 10 "⏎", 12 "⌧", 16 "⇧", 17 "⌃", 18 "⌥" ... }
(r/get-key-name 61440) ;; => "F13"
added docs about java interop; updated to clojure 1.11#2022-03-3107:24Jakub Holý (HolyJak)Nice, I did not know about these java capabilities.
I have noticed (r/clipboard-get-string) ;; => text to put in clipboard in readme, the comment is confusing?
Also I see there Copyright © 2020 FIXME 🙂#2022-03-3110:14Dumchthank you, I will fix it#2022-03-3017:48tengstrandpoly https://github.com/polyfy/polylith/releases/tag/v0.2.14-alpha released #polylith. The highlights are:
• Don’t commit files when creating a workspace (if not passing in :commit) - issue https://github.com/polyfy/polylith/issues/160
• Now we can run all tests for selected projects - issuehttps://github.com/polyfy/polylith/issues/189
• PDF https://github.com/polyfy/polylith/releases/download/v0.2.14-alpha/poly-0-2-14-alpha.pdf.#2022-03-3108:32mpenetNew https://github.com/exoscale/coax is out: 1.0.0-alpha19 (cljs bugfix with double/long coercion). Thanks to @anthony-galea#2022-03-3117:05ericdalloclojure-lsp Released new https://clojure-lsp.io/ 2022.03.31-14.21.14 with a new long waited feature: Java interop support 🎉
Now, finding java class definitions are possible even if the source code is not available, clojure-lsp will decompile it for you!
This was a huge work done with the help of @borkdude from the #clj-kondo side, hope you all like it :)
This release was supported by https://www.clojuriststogether.org/ clojurists-together gratitude
For more information about this release, check #lsp#2022-03-3117:07russmatneyamazing!!!#2022-03-3119:15Cora (she/her)daaaang, so good!!#2022-03-3119:48Janne SauvalaSuper awesome! I'm interested in the solution how you made this possible#2022-03-3119:50ericdalloSure @UJZ6S8YR2 , the decompilation works using https://www.benf.org/other/cfr/, which output a .class file to a .java :)#2022-03-3119:51ericdallothre rest is more navigation and making good defaults#2022-03-3120:11Janne SauvalaNice 👍:skin-tone-2: this is one of the features I have been waiting. Congrats for the release!#2022-03-3120:13borkdudeAnd many more improvements to come, also powered by clj-kondo analysis clj-kondo 🚀 :)#2022-04-0106:51flowthingAwesome! Is navigating directly to static/instance method impls in the cards?#2022-04-0106:56borkdudeYes, in the coming months #2022-04-0107:08flowthingVery nice! That'll be a big step forward for doing Java interop in editors other than Cursive. :thumbsup:#2022-04-0108:38vemv> other than Cursive
The cider-nrepl family of editors also has these features around the corner. They're there really, as they have for a pretty long time, but we just need to reliably deliver one of the last missing pieces#2022-04-0116:21mpenetDoesn't cider have this already? I remember at least that it has completion#2022-04-0116:22mpenetAt least on static members, enums etc#2022-04-0116:23mpenetNot sure about jump to def & co, I was not really using that before using lsp#2022-04-0116:27borkdude@U050SC7SV Not sure if CIDER also decompiles .class files ;-)#2022-04-0116:27borkdudeAs always, there will be overlap between these tools#2022-04-0116:29mpenetYeah I recall only seeing that for clojure java stuff actually#2022-04-0116:30vemvThe decompilation thing seemed a bit odd to me, wrapping https://github.com/clojure-goes-fast/clj-java-decompiler is pretty easy (and part of my workflow for tough bugs or random curiosity) but considering a decompilation a fallback for "jump-to" is a bit surprising
> Doesn't cider have this already? I remember at least that it has completion
Yeah completion is there, https://github.com/alexander-yakushev/compliment/ provides it#2022-04-0116:33chrisnI have a drop-in replacement for clojure.data.csv that is much faster - around 10x - for large (1GB+) csv files. I took the time to study how univocity gets its great performance and write a small csv parsing system that has equivalent performance but removes some of the complications such as a fixed column width from it.
CSV parsing isn't meaningfully parallelizable because quoted sections can contain newlines and inside a quoted section a double quote escapes a quote so you can't start at a random address and start parsing because you don't know if you are inside a quote. You have to parse from the beginning and tricks like line-seq also are not going to work. line-seq is, however, amazingly fast as the readers readline function is very optimized across jdks. Any parallelized approach is a two-pass algo where the second pass can be parallelized which I don't think you can efficiently do in java although I have seen vectorized 2 pass approaches in c++.
Turns out anywhere you use an actual java.io.pushbackreader you are sunk as far as performance is concerned. You have to read into character arrays and then implement a pushback-style abstraction on top of that if you want to have good performance parsing files. This is even moreso, interestingly enough, for jdk-17 where the int read(); has been heavily nerfed while the read(char[], int, int) function has received a health bordering on insane amount of buffs. By my tests in jdk-17 read() if a 1.7GB file for a pushback reader is 51sec vs 500ms for a tight loop reading into a character array.
This may mean that there are avenues to parsing large amounts of json and edn that are significantly faster than the current approach used by various existing libraries. IT also means that fancy methods of reading character data from a file, such as memory mapping it and even potentially io_uring on linux are unlikely to get any faster for CSV parsing specifically unless you know your data doesn't have quoted sections.
At the end of the day - don't use csv. Use arrow or parquet if you need any performance at all as a parquet file of a 1.7GB test csv set was ~240MB. But if you do use or have to parse a lot of csv data - https://cnuernber.github.io/dtype-next/tech.v3.datatype.char-input.html#var-read-csv.#2022-04-0116:38Alex Miller (Clojure team)are these changes that could be applied in data.csv instead?#2022-04-0116:41Noah BogartGonna have to check this out, see if there are any wins available for #data-json #2022-04-0116:44chrisnPlease read the namespace docs. I used java classes for tight loops.#2022-04-0116:49chrisn@U064X3EF3 - I suggest a quick look over the code. It is a complete rewrite that is much more intense than the original pathway. Original clojure.data.csv code is I think very beautiful and concise and thus probably a better teaching tool. What I would perhaps consider is moving away from PushbackReaders in clojure's java edn and lisp reader pathways.#2022-04-0117:20Alex Miller (Clojure team)I have done some experiments like that in the past, so cool to see an example#2022-04-0117:50Cora (she/her)whoooaaaaaa#2022-04-0119:45Ben SlessVery cool
I've done something similar going the other way around, writing CSV, making it possible to pretty much stream it directly#2022-04-0120:00metasoarousFantastic work as always @UDRJMEFSN!#2022-04-0121:12chrisn@UK0810AQ2 - That is interesting -all of this is really for tech.ml.dataset at the end of the day and we don't serialize large datasets to csv. We do, however, come across csv datasets in the wild all the time.#2022-04-0204:26Ben Sless@UDRJMEFSN we often have to produce reports for clients at work and they can be interested in getting them as CSV sometimes#2022-04-0208:51slipsetDuring my work with speeding up data.json I guess I found some of the same stuff as you did @UDRJMEFSN. In essence there were two bottle necks, one was the parsing out strings, ie stuff inside quotes, and the other was creating the persistent data-structures.
I ended up using a java.io.PushbackReader but rather than reading char by char, I ended up reading into a buffer of length 64 and working on that, as you can see here https://github.com/clojure/data.json/blob/master/src/main/clojure/clojure/data/json.clj#L94
I do believe I did some experiments with implementing a PushbackReader like thing in Java, but couldn’t really get any significant performance out of it.#2022-04-0212:05chrisn@U04V5VAUN - then I think there is so many other things going on it overwhelmed the time it took - if you are building persistent datastructures there are probably many things you can do quicker. Here are timings for int read() of pushback reader vs. my custom https://github.com/cnuernber/dtype-next/blob/master/java/tech/v3/datatype/CharReader.java -
(time (read-all-chars (io/reader fname)))
;; jdk-8 - 5728ms
;; jdk-17 - 28257ms
(time (read-all-chars (PushbackReader. (io/reader fname))))
;; jdk-8 - 19964ms
;; jdk-17 - 51795ms
(time (read-all-char-reader (char-input/reader->char-reader (io/reader fname)
{:async? false
:n-buffers 2
:bufsize (* 16 1024)})))
;; jdk-8 - 3728ms
;; jdk-17 - 3053ms
(time (read-all-char-reader (char-input/reader->char-reader (io/reader fname)
{:async? true
:queue-depth 4
})))
;; jdk-8 - 2872ms
;; jdk-17 - 2832ms
Even compared to read() using a reader, the custom implementation is a faster till jdk-17. If we look at the source code of PushbackReader then we can see why - https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/java/io/PushbackReader.java#L86 - its a synchronized method followed by noise as opposed to, in most cases, an index bump and returning from an aget. But the large win is when you have a tight loop and reading the next character is an aget like you did for the strings.
Moving from conj! with a transient persistent vector to an arraylist gets a ton of speed right there and using a normal HashTable and such have similar speed improvements so it really depends on if you need persistent datastructures at the end of the day. Also for CSV parsing I parse into 1 arraylist and have 1 stringbuilder-type object for the entire file and I clear() both of them just copying the arraylist when returning the value so I have a 'workspace' that is fixed and thus uses the same amount of memory all the time. Moving the tight loops from Clojure into Java like I did also improved the time considerably but only once everything else was fixed. Finally I checked that everything would inline correctly with -XX+PrintInline and friends. Finally I have a read thread that does the IO and use an ArrayBlockingQueue to communicate read blocks so the cpu-bound thread doesn't block on IO nearly ever.
Because my use case is tmd I don't care if the datastructures are persistent or not but I imagine that if I took a careful look at data.json I could make improvements in the same vein as I mentioned but it would end up being more Java than Clojure. We just don't see GB+ json files like we do see large CSV files so it hasn't come up.
I am not sure using transients is ever faster than say using arraylists and then calling toArray and then calling the appropriate persistent constructor (lazilypersistentlist, one of the two maps). Perhaps it is but I don't know if it is. It is definitely slower in the vector-type case than just using arraylist add.#2022-04-0212:46chrisnIt's also the case that json is just harder by far than csv. metosin's jsonista on top of the jackson architecture only gets like a 2x perf gain - if that - above data.json in terms of decoding time. univocity got 10X+ against data.csv - so there was clearly a lot to gain there. Interestingly to me jsonista gets a major encoding gain which I wouldn't expect.#2022-04-0212:46slipsetI guess one major difference is that json is recursive in its structure, whereas csv is not.#2022-04-0212:47slipsetWhich means sticking to one stringbuffer for the whole parsing operation won’t do (unless you do something really smart)#2022-04-0212:49slipsetAnd, we’re talking different sizes here, ["10b" "100b" "1k" "10k" "100k"] is the range of sizes I was working with (and which are “normal” I guess for json parsing)#2022-04-0212:53slipset(defn- read-array* ([^PushbackReader stream options]
;; Handles all array values after the first.
(let [result (java.util.ArrayList.)]
(loop []
(.add result (-read stream true nil options))
(codepoint-case (int (next-token stream))
\] (clojure.lang.PersistentVector/create result)
\, (recur)
(throw (invalid-array-exception)))))))
(defn- read-array* [^PushbackReader stream options]
;; Handles all array values after the first.
(loop [result (transient [])]
(let [r (conj! result (-read stream true nil options))]
(codepoint-case (int (next-token stream))
\] (persistent! r)
\, (recur r)
(throw (invalid-array-exception))))))
These two versions are basically of same speed.#2022-04-0212:56slipset(and one might argue that at least for my use case, the maps dominates lists in the json)#2022-04-0212:56chrisnThen if you can return arraylists instead of vectors that would be a speed gain but kind of irrelevant. Maps have a similar low level constructor from an array of key,val,key,val.#2022-04-0212:57slipsetYeah, but returning anything non-persistent would be contract breakage in the case of data.json.#2022-04-0212:58chrisnYes - which is why I work in dtype-next 🙂.#2022-04-0213:01chrisnI will take a look at json parsing at some point. If jackson is barely faster then it is using same system under the hood more or less and there may be something there. dtype-next also has https://github.com/cnuernber/dtype-next/blob/master/java/tech/v3/datatype/ListPersistentVector.java to create a persistent vector compatible object from any java list in place.#2022-04-0213:05chrisnjson is also harder because those sizes above 1b -> 100k. No one cares about 1k csv files at all - they only care when the file gets big. For servers parsing small json is something you always do all the time so it is very relevant.#2022-04-0213:06chrisn100k csv is like just barely getting started.#2022-04-0213:07chrisnI mean, why not just read everything into a single character array and push-back just writes data back into the array and resets the index.#2022-04-0213:10slipsetI believe I did something like that at some point (to see how much gains I could get from that), but everything sort of got dwarfed by https://github.com/clojure/data.json/blob/master/src/main/clojure/clojure/data/json.clj#L94 and specifically https://github.com/clojure/data.json/blob/master/src/main/clojure/clojure/data/json.clj#L108 , So basically creating the new string.#2022-04-0213:10slipset(but then again, it’s a bit over a year since I last worked on this, so I don’t remember everything.#2022-04-0213:11slipsetBut, I guess you should be seeing much of the same, since parsing csv is very much about creating strings.#2022-04-0213:12slipsetAnd i believe I implemented read-quoted-string in Java at some point without seeing huge increases in speed.#2022-04-0213:13chrisnI realized that to get a major gain I had to be tight looping over indexes of a character array and that array had to be local to the method (meaning spilling field variables to locals). Then it was lots of reorganizing code and profiling and such.
I did see significant speed increases when I moved to java for the read-row loop myself but I haven't seen those increases in general when moving e.g. a summation loop into java. It depends I guess on the context a bit.#2022-04-0213:14chrisnthe high end of hotspot's ability to optimize pretty much only works on arrays, primitives, and simple base jvm datastructures.#2022-04-0213:20slipsetpublic final class json$read_quoted_string extends AFunction
{
public static final Object const__1;
public static final Var const__11;
public static Object invokeStatic(final Object stream) {
final Object buffer = Numbers.char_array(json$read_quoted_string.const__1);
final int read = ((PushbackReader)stream).read((char[])buffer, RT.intCast(0L), RT.intCast(64L));
final int end_index = read - 1;
if (read < 0L) {
throw new EOFException("JSON error (end-of-file inside string)");
}
long i = RT.intCast(0L);
Object o = null;
Label_0537:
while (true) {
final int G__18164;
final int c = G__18164 = RT.intCast(((char[])buffer)[RT.intCast(i)]);
switch (G__18164) {
case 34: {
final int off = RT.intCast(i) + 1;
final int len = read - off;
((PushbackReader)stream).unread((char[])buffer, off, len);
o = new String((char[])buffer, RT.intCast(0L), RT.intCast(i));
break Label_0537;
}
case 92: {
final long off2 = i;
final int len = read - RT.intCast(off2);
((PushbackReader)stream).unread((char[])buffer, RT.intCast(off2), len);
o = ((IFn)json$read_quoted_string.const__11.getRawRoot()).invoke(stream, new String((char[])buffer, RT.intCast(0L), RT.intCast(i)));
break Label_0537;
}
default: {
if (i == end_index) {
((PushbackReader)stream).unread(c);
o = ((IFn)json$read_quoted_string.const__11.getRawRoot()).invoke(stream, new String((char[])buffer, RT.intCast(0L), RT.intCast(i)));
break Label_0537;
}
i = RT.intCast(i) + 1;
continue;
}
}
}
return o;
}
Is the decompiled read-quoted-string what’s a bit annoying are the intCasts that go on, but that might just be handled by the JIT?#2022-04-0213:25chrisnok, so that was another reason I worked in java. To avoid casting every char to int and indexes to int.
Here is the tight loop for csv parsing: https://github.com/cnuernber/dtype-next/blob/master/java/tech/v3/datatype/CharReader.java#L97.#2022-04-0213:27chrisnAlso note that hotspot's optimization pathways are built expecting the output of javac. To the extent they work with other compilers is luck.#2022-04-0213:29chrisnhaha, to the extent they work with javac's output is luck much less other compilers 🙂.#2022-04-0213:29chrisn...the magic of hotspot...#2022-04-0213:47Ben Sless@U04V5VAUN you can't use ints as primitive locals in loops, you're doing more casts that way, replace it with a regular long and set unchecked math to be true#2022-04-0213:47Ben SlessIf you was r to actually see what hotspot does with your code you can use tools like jitwatch#2022-04-0213:48Ben SlessIt's a bit of a hassle but very doable#2022-04-0214:00Ben Sless@UDRJMEFSN regarding the "canonicity" of javac, it's not as bad as you put it. It's a pretty simple compiler and you can know exactly which bytecode will be emitted from looking at java. I'd go as far as saying you can compile most java by hand (wouldn't want to). The JVM spec contains sections in targeting the JVM with your own compiler. Clojure also does a good job both in the implementation and compilation fronts on emitting JIT friendly code, especially after we got direct linking.
I'd say the only detrimental parts in the implementation are around ints and you can often work around most of them, although a java implementation will always be faster there.
Still, even in java if you want to squeeze the most performance out of an implementation, you have to write both JIT friendly and CPU friendly code#2022-04-0215:49chrisn@UK0810AQ2 - True, there are some statements that compile to similar bytecode and there are some loops that optimize will from clojure to hotspot but that pertains to the extent they match what javac would emit for various bits of code. That was really my point and my first statement - hotspot is built to target the output of javac is very true. Small variations that have no discernable difference in code output such as locals clearing can disable various optimizations that would have happened given very simply written java code. An example from the CSV parser is I got a major perf gain from simply spilling field variables to locals despite the fact that the entire parser is small enough to fit in registers in the current CPU architectures - hotspot couldn't detect of course that the field variable should be kept in a register for a given loop.
I hadn't heard about jitwatch and you just made my day - compiling hsdis for a given platform is a pita.
Totally agreed about jit and cpu friendly code - hence the design of the CharReader.java that I pointed to earlier. Hotspot is fairly weak - if you move beyond arrays and primitives then you are majorly dropping the chances that it will do anything meaningful as compared to an implementation in c++. In fact, when I was working through a math library a while back in java I found that simply adding an offset to an array access in a loop so I could use sub-arrays caused a major performance drain in a tight loop as compared to no array offset despite the fact that x86 assembly and it's various SIMD extensions have assembly instructions meant for indirect access of data. So at least I have to be really mindful and minimal if I want hotspot to do what I expect it to do given my background in other languages. Local variables, arrays, primitives, simple datastructures are simple looping constructs. Anything else is just usually off the table. And certainly no synchronization and absolutely not synchronization per character.#2022-04-0215:53chrisnHonestly the bigger thing to think about is moving away from pushback reader in https://github.com/clojure/clojure/search?q=pushbackreader - the tools every clojure person uses many many times every day.#2022-04-0216:15Ben SlessIf takes a bit of tinkering but I was able to get jitwatch to even display the clojure source alongside the bytecode and assembly. Feel free to ping me about it if you have questions. I also think it went better with an uberjar than a repl#2022-04-0217:39chrisnThat is amazing literally. What a great tool - I will get into it and ping you. Thanks a ton!#2022-04-0416:06rickmoynihan@UDRJMEFSN:
> This is even moreso, interestingly enough, for jdk-17 where the int read(); has been heavily nerfed while the read(char[], int, int) function has received a health bordering on insane amount of buffs.
Can you clarify what you mean by this? I get that you’re saying pushback reader read() is slower in jdk17? but what are you saying about read(char [], int, int)?#2022-04-0418:46chrisn@U06HHF230 - Sure - according to my tests, PushbackReader's read (and clojure.data.csv) are far slower on jdk17 while read(char[], int, int) for a Reader is far faster. Here are the timings I found:
(time (read-all-chars (io/reader fname)))
;; jdk-8 - 5728ms
;; jdk-17 - 28257ms
(time (read-all-chars (PushbackReader. (io/reader fname))))
;; jdk-8 - 19964ms
;; jdk-17 - 51795ms
;;line-seq is pretty good but you can have newlines within quoted sections
(time (count (line-seq (io/reader fname))))
;; jdk-17 - 2222ms
(time (read-all-cbuf (io/reader fname)))
;; jdk-8 - 1480ms
;; jdk-17 - 426.24ms
#2022-04-0418:47chrisnReading the large CSV with clojure.data.csv also displayed this disparity:
(time (count (csv/read-csv (io/reader fname))))
;; jdk-8 - 56937ms
;; jdk-17 - 81223ms
#2022-04-0118:15Alex Miller (Clojure team)https://clojure.org/releases/devchangelog#v1.11.1-rc1 is now available
• https://clojure.atlassian.net/browse/CLJ-2701 Pin serialVersionUID for Keyword and ArraySeq back to 1.10.3 values to retain binary serialization#2022-04-0120:08Noah BogartAny particular reason you didn't want to pin the other class IDs? #2022-04-0120:14Alex Miller (Clojure team)they didn't change so trying to do as small a change as possible in 1.11.1, we will do that in 1.12#2022-04-0120:17Noah BogartThat makes sense. Thanks#2022-04-0205:30jumarExcellent - thanks a ton Alex for the quick turnaround.
We'll give it a try.#2022-04-0217:33jumarI've just tried it and it works beautifully - thanks again!#2022-04-0310:53pezMulti cursor support is on its way to Calva Paredit, thanks to the wonderful work of @rayatrahman9! 🙏 gratitude . It is working in dev builds, and now we need your help testing this and finding remaining issues. Not sure how to do this, but trying this approach. I've introduced the feature and the process for testing and reporting on this issue: https://github.com/BetterThanTomorrow/calva/issues/1662 There you'll find
1. A video of the feature in action, including some glitches.
2. A link to the latest VSIX (the zip-file that contains the VS Code extension)
3. A description of the document notation we use for describing structural editing behaviour in Calva
4. Links and some instructions on how to proceed
5. Some first reports of some of the issues I have found
Please, please consider doing this! ❤️#2022-04-0310:56pezHere's a video of the current build in action, warts and all!#2022-04-0312:46leifericfI’m blown away whenever I see your multi-cursor magic in your YouTube videos, @U0ETXRFEW 😅 Like in your FizzBuzz video, when you added a comment with the sample output data and aligned everything. I was thinking “Whaaat… How? And why am I goofing around with regex find-and-replace to do stuff like that?!” Multi-cursor and Paredit is some next-level stuff! 🤯#2022-04-0313:57pezI love multi-cursors. They have been lacking from Paredit for this long mostly because I've never figured out how to do it. But @rayatrahman9 just did it. When I look at how, I’m like “oh, of course!” Open source is wonderful. #2022-04-0321:46teodorluNeil 0.18 has just been released!
Neil is a small babashka script to work with deps.edn. Running on plain babashka means neil starts quickly. New in version 0.18 is the ability to list which versions of a library are available on Clojars or Maven. This is useful if you don't want every RC/alpha version. Example:
$ neil dep versions org.clojure/clojure :limit 4
:lib org.clojure/clojure :version 1.11.1-rc1
:lib org.clojure/clojure :version 1.11.0
:lib org.clojure/clojure :version 1.11.0-rc1
:lib org.clojure/clojure :version 1.11.0-beta1
A single line from neil dep versions can be piped back into neil dep add[1]. With the help of a fuzzy-selector like fzf, we can list recent versions, interactively select one, and add the selected version to deps.edn:
$ neil dep versions org.clojure/clojure | fzf | xargs neil dep add
Small video attached. Please ignore the neilz command name - the video was made before Neil 0.18 was released.
To install Neil, see Github: https://github.com/babashka/neil.
[1]: neil dep add and neil add dep currently do exactly the same thing.#2022-04-0410:54curtis.summersHugSQL 0.5.2 (and followup 0.5.3) released with the following changes:
0.5.3
• cljdoc-related fixes; otherwise, same as version 0.5.2
0.5.2
• new (markdown-based) docs! (https://hugsql.org) https://github.com/layerware/hugsql/pull/131
• fix fn defs to be at compile-time https://github.com/layerware/hugsql/issues/126 (thanks https://github.com/kelvinqian00https://github.com/kelvinqian00)!)
• fix file var metadata to be a string https://github.com/layerware/hugsql/issues/137 (thanks https://github.com/gtrakhttps://github.com/gtrak))
• allow % in keywords https://github.com/layerware/hugsql/pull/136 (thanks https://github.com/Rovanionhttps://github.com/Rovanion))
• update next.jdbc groupId https://github.com/layerware/hugsql/issues/127 (thanks https://github.com/dmarjenburghhttps://github.com/dmarjenburgh))
• update clojure.java.jdbc to 0.7.12 https://github.com/layerware/hugsql/pull/135 (thanks https://github.com/jonassvalinhttps://github.com/jonassvalin))
• markdown doc strings (for http://cljdoc.org)
• linter fixes
https://hugsql.org#2022-04-0411:53borkdude@U065ZC1BP Awesome! Since a recent release of babashka, hugsql.core sqlvec fns can also be ran with that. There is a test in bb CI:
(ns hugsql.babashka-test
(:require [babashka.fs :as fs]
[clojure.test :as t :refer [deftest is]]
[hugsql.core :as hugsql]))
(def sql-file (fs/file (fs/parent *file*) "characters.sql"))
(hugsql/def-db-fns sql-file)
(hugsql/def-sqlvec-fns sql-file)
(declare characters-by-ids-specify-cols-sqlvec)
(deftest sqlvec-test
(is (= ["select name, specialty from characters\nwhere id in (?,?)" 1 2]
(characters-by-ids-specify-cols-sqlvec {:ids [1 2], :cols ["name" "specialty"]}))))#2022-04-0412:53curtis.summers@U04V15CAJ Very cool. I love what you're doing w/ babashka! Thanks!#2022-04-0414:42borkdude#babashka 0.8.0 released. Major new feature is the ability to declare pods in bb.edn. This effort was largely driven by @cap10morgan 👏
See here for an example: https://book.babashka.org/#_pods_in_bb_edn
Full changelogs with many other improvements: https://github.com/babashka/babashka/blob/master/CHANGELOG.md#080-2022-04-04
Next Saturday, @rahul080327 will present about #babashka at NovaLug: https://www.meetup.com/novalug/events/fzklrsydcgbmb/ - feel welcome to join!#2022-04-0415:06richiardiandreaThe new pods addition is very nice, thanks @cap10morgan and @U04V15CAJ!#2022-04-0415:59Jarrod Taylor (Clojure team)Are you interested in learning how to use Datomic?
Do you have a sense of humor and enjoy free retro interactive browser based tutorials?
Then you really should checkout https://max-datom.com#2022-04-0417:07metasoarousThis is marvelous! Thanks for creating/sharing!#2022-04-0420:03KelvinReminds me of a project I helped make for a college course which was a monad tutorial with a similar retro aesthetic#2022-04-0422:46Tomas Brejlavery nice 👏 🙂
2 small things I'm missing:
• It would be nice if ctrl+enter in the code editor submitted the code. (ie. so that I don't have to click RUN QUERYbutton all the time)
• showing "matching paren" (for the paren then my cursor is currently placed after) would help a lot with finding unbalanced form. #2022-04-0500:04Jarrod Taylor (Clojure team)I pushed an update so matching braces are now highlighted.#2022-04-0510:02pezI find that I want to experiment a bit even after that snarky bot has concluded I might have learnt something. I think that a button that let's me evaluate ”outside” the script would do it for me. Not sure I am making sense... I'm thinking two Run buttons. One that asks for feedback from the bot/advances the story and one that just evaluates the code. Not sure how to not confuse the user with two Run buttons, but anyway. 😃#2022-04-0514:16Tomas Brejla@U0508JRJC found a bit strange behavior. Adding just a single space or newline results in "unmatched delimiter". (see enclosed picture)
I think I haven't seen this yesterday although I'm very sure I used to indent the db into its own new line.#2022-04-0515:38Akiz@U02FU7RMG8M do you still have it?#2022-04-0515:41KelvinUnfortunately the repo is private and the Heroku app no longer seems to work. But here is a screenshot of the front page:#2022-04-0515:42KelvinAnd the lesson select page (complete with Gratuitous Japanese):#2022-04-0515:45KelvinFinally here's a sample lesson page, with the input being a Codemirror box:#2022-04-0816:17eggsyntaxOh my god, @U0508JRJC, that prologue is the funniest thing I’ve read in ages :rolling_on_the_floor_laughing:☠️#2022-04-0818:33Jarrod Taylor (Clojure team)I am glad to know it made someone chuckle 😄. You never know when you are writing something like that if it will land with the reader.#2022-04-0419:07Jacob O'BryantBig news 🙂
Biff is a web framework I initially released about two years ago and have been using in my own business since. I've spent the past couple months giving it a major overhaul based on my experiences with it. It's now ready to go!
https://biffweb.com/p/new-release#2022-04-0419:40jmayaalvSold on htmx!! Really cool#2022-04-0421:21borkdudeCongrats!#2022-04-0422:31eccentric JVery cool! Been interested in combining alpine js (or a cljs equivalent) with scittle for frontend where react is overkill, this seems to validate that concept and looks like a solid stack to explore.#2022-04-0501:18Jacob O'Bryantthanks!#2022-04-0504:27tatutnice to see more people embracing server side rendering, congratulations on the release#2022-04-0516:26Luke ZeitlinTIL about htmx - looks like a really interesting choice#2022-04-0518:18Michaël Salihi@UE7LPTG1L For htmx, you may be interested to take a look at https://github.com/prestancedesign/babashka-htmx-todoapp
Easy to run and play with. 😉#2022-04-0518:25Jacob O'Bryanthtmx (and hyperscript) are pretty great. This was a nice post about the general movement (it doesn't actually mention htmx, which is a shame, but it talks about other tools/frameworks in the same general category): https://github.com/readme/featured/server-side-languages-for-front-end#2022-04-0518:43pezCongrats! 🎉 #2022-04-0514:25Kelvinhttps://github.com/yetanalytics/flint v0.1.2 has been released:
• Fix bug where certain SPARQL Update queries - LOAD, CLEAR, CREATE, and DELETE - were not being correctly formatted.
• Fix validation of strings containing escaped char sequences such as \\n and \\r. (Special thanks to @quoll for their assistance on this bugfix.)
This builds upon the (unannounced) v0.1.1 update, which was another bugfix update. For a full list of changes in v0.1.1 and v0.1.2, please see the https://github.com/yetanalytics/flint/blob/main/CHANGELOG.md.#2022-04-0515:12Alex Miller (Clojure team)https://clojure.org/news/2022/04/05/clojure-1-11-1 is now available with one change:
• https://clojure.atlassian.net/browse/CLJ-2701 - roll back serialVersionUID for Keyword and ArraySeq to match 1.10.3 (retaining binary serialization version)#2022-04-0522:31seancorfieldWe have this in production for a couple of our apps. It's on staging too, for everything. Nothing weird seen so far.#2022-04-0518:05Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.11.1.1105 is now available:
• Defaults to Clojure 1.11.1 if no Clojure is specified#2022-04-0518:07seancorfieldThat should be 1.11.1.1105 in the text, yes? That's what is in the link.#2022-04-0518:09Alex Miller (Clojure team)yep#2022-04-0518:09Alex Miller (Clojure team)too many 1s#2022-04-0518:28imreYou know you must now fix some things in 6 commits I hope 🙂#2022-04-0518:29Alex Miller (Clojure team)could happen! :)#2022-04-0519:44genmeblogShould be released, just for a version number 🙂#2022-04-0521:18steffanWill the next release be (/ 10 9) ? :thinking_face:#2022-04-0521:23Alex Miller (Clojure team)I don't think 10/9 makes a very good version number 😉#2022-04-0521:33steffanIt also has far too many 1s for my liking 😏#2022-04-0521:38Alex Miller (Clojure team)It's only got 1!#2022-04-0603:26emccue> could happen! 🙂#2022-04-0606:18djblueJust released https://github.com/djblue/portal/releases/tag/0.23.0, a data exploration / navigation tool for clojure.
Some recent highlights include:
- Gruvbox color theme
- :deps/prep-lib for git deps support
- Table viewer now supports group-by style maps
- Runtime icons for the log viewer
Drop by #portal with any questions.#2022-04-0609:15Matthew Davidson (kingmob)After all these years, we’re announcing primitive-math version 1.0.0, the first under clj-commons. https://clojars.org/org.clj-commons/primitive-math/versions/1.0.0
Let’s get this out of the way first: there are no bug fixes or changes to the existing code, so if you don’t use Graal or clj-easy, this update won’t interest you.
If you do use Graal/clj-easy, all code has been copied from a top-level single-segment ns to be also under a clj-commons ns. If you update your requires, you should no longer have any issues with single-segment namespaces.
(There have been some slight updates to the docs, which are now available at cljdoc.)
Many thanks to @p2b for bringing up the single-segment issue and especially @craigy for fixing it! Plus, thx to @slipset for setting up the CircleCI tag deployment.#2022-04-0619:25Asko NōmmIntroducing Clarktown: https://github.com/askonomm/clarktown
A zero-dependency, pure-Clojure Markdown parser. Also entirely modular and extensible, so you can take out parts of it or add new parts to it with ease and really make it your own.
I’m currently using it to render my own blog (http://bien.ee), and it works wonders. Do note however that it does not support the whole CommonMark spec, and I do not aim for it either, but rather would like to be more pragmatic and implement the parts that I myself use, or that people point out that they could really use.#2022-04-0619:27Noah Bogart> it does support
is this supposed to be "it doesn't support"?#2022-04-0619:27Noah Bogartotherwise, great job!#2022-04-0619:31Asko NōmmYup you are totally right! It does not support, fixed now!#2022-04-0619:41russmatneynice work! i wonder how this compares to https://github.com/kiranshila/cybermonday#2022-04-0619:45Asko NōmmFrom quickly parsing cybermonday the big difference is that Clarktown only outputs HTML. That being said, since it is modular, it is quite easy to make it output whatever you want, but my goal was just HTML.#2022-04-0619:47russmatneydefinitely makes sense to be practical - i'll give it a read soon. no deps is pretty fun!#2022-04-0620:04Asko NōmmI’m a fan of tiny, self-contained software. My experience seems to keep telling me that the less there are dependencies, the longer the software lasts.#2022-04-0620:10borkdude@U026NQLSBLH Aw yeah:
$ bb -cp src -e "(require '[clarktown.core :as clarktown]) (clarktown/render \"**Hello, world**\")"
"<ol><li><strong>Hello, world</strong></li></ol>"
#2022-04-0620:12Asko NōmmI’m happy it works with Babashka out of the box! But you also just discovered a bug 😄 It renders bold text in an ordered list. I’ll get right on that.#2022-04-0620:12borkdude:-D#2022-04-0620:17borkdude@U026NQLSBLH I'm using markdown-clj in https://blog.michielborkent.nl/ (rendered by bb). Where do you think your lib differs?#2022-04-0620:27Asko NōmmBug is fixed in 1.0.3 version!
As for the difference to markdown-clj, on the outset, it doesn’t differ. In fact actually it has less Markdown support built-in than markdown-clj, for example markdown-clj has footnote support which Clarktown doesn’t.
But, Clarktown is modular and extensible (pick it apart and make it your own), so if you wanted to make some quick changes or add new features, that would be very straight forward to do.
Like I said above as well, I do not intend to target full CommonMark spec as a goal of this library, and only add things that people would request from that spec or that I myself happen to find needing, so as to be more pragmatic in its development, and perhaps eventually reaching that spec completeness sort of organically.#2022-04-0710:23Vincent CantinCongratulation for the release#2022-04-0711:10Asko NōmmMuch appreciated @U8MJBRSR5!#2022-04-0619:32chrisnLighting https://cnuernber.github.io/dtype-next/tech.v3.datatype.char-input.html#var-read-json without the jackson dependency hairball. Same speed (or faster with options) as jsonista which by my tests put it about 5-10x faster than clojure.data.json. This is the same story as the fast CSV parser in the same library - don't use pushback reader and write tight loops in java. In any case, here is a https://github.com/cnuernber/fast-json. Overall if you are already using jsonista then there is no benefit unless you don't want immutable datastructures but for https://github.com/techascent/tech.ml.dataset, for example, it doesn't make a difference if the input is an array of java hashmaps or an array of clojure persistent maps.
Interestingly the fastest option is a mix where for small maps I use a persistent array map and for larger maps I use a hashmap. Given that you get the full array of key-value objects up front I bet there is some fancy way to make a persistent hash map very fast (like computing all hashes in parallel type operations) - this I haven't researched.
One more thing - the relative performance of clojure.data.json gets worse moving from jdk-8 to jdk-17 🙂. If you want to know why please read replies to the the earlier announcement about the CSV parsing system - PushbackReader's single character performance drops noticeably from JDK-8 to JDK-17.
In any case, enjoy - https://cnuernber.github.io/dtype-next/tech.v3.datatype.char-input.html#var-read-json.#2022-04-0620:04Daniel JompheImpressive, Chris!
> Overall if you are already using jsonista then there is no benefit unless you don't want immutable datastructures
No dependencies on Jackson is a very serious advantage.
What do you mean about immutable datastructures?
> In any case, here is a https://github.com/cnuernber/fast-json.
Have you also profiled impact on RAM?
I suppose there's quite an improvement there too.#2022-04-0620:34chrisnI haven't checked the RAM usage - criterium does record such things so I could but I would guess everyone's RAM usage is nearly identical as we are all returning the entire object graph in memory at once.
The performance really comes down to how fast you can create maps. So I profiled a few variations such as always use persistent maps, use a mix of persistent and java hashmaps, etc. Turns out the fastest thing aside from just returning the object[] in place in a marker object is to use https://github.com/cnuernber/dtype-next/blob/master/src/tech/v3/datatype/char_input.clj#L377.#2022-04-0620:42Daniel JompheAnd when you mentioned "unless you don't want immutable datastructures", is that just an internal implementation detail? If we read json with this lib and want immutable data, should we then add a step for that?#2022-04-0622:08chrisnIt's an option - the default is immutable. See to docs specifically about :profile.#2022-04-0705:43domparryThis is super interesting! Well done Chris. I agree that removing the dependancy on Jackson is a great advantage.#2022-04-0706:17ikitommiWell done, impressive numbers!#2022-04-0706:20ikitommithere is also a https://github.com/metosin/jsonista/blob/master/src/clj/jsonista/core.clj#L103-L108 btw, would be interesting to see that too. Bit surprised that clojure.data.json is so much slower here, based on the Jsonista tests, it’s much closer. I could add this (and Jsonista mutable) to Jsonista JMH perf suite.#2022-04-0710:09eskosHi, this might be a bit daunting request but since this is a custom implementation of JSON, could you run the conformance suite used to produce this: http://seriot.ch/json/parsing.html#2022-04-0712:15chrisn@U8SFC8HLP - Note that I used the https://github.com/cnuernber/dtype-next/blob/master/test/tech/v3/datatype/json/json_test_suite_test.clj as clojure.data.json.
@U055NJ5CC - Yes for sure - it isn't clear exactly how to use this module instead of the clojure one. Will mess with it. If you have a snippet that does this exactly it would be helpful.#2022-04-0712:18chrisnI think the timing discrepencies are because I decided to parse the data from in-memory strings - reason being that I think any high perf use case can separate getting the data prepared and into memory from actually parsing the data. The dtype char-input system also includes a simple blocking io abstraction for larger files or network input streams but performance testing that involves gridsearching buffer sizes and such so it is much more involved.#2022-04-0712:18chrisnI wanted to see the performance of the parsers specifically, not the io subsystem.#2022-04-0713:27chrisn@U055NJ5CC - Updated with jsonista-mutable.#2022-04-0714:20chrisnAlso I should say this - if you want much better performance then using a https://github.com/techascent/tech.ml.dataset and serializing https://github.com/cnuernber/tmdjs/blob/master/src/tech/v3/libs/transit.clj#L124 is much faster than anything mentioned thus far. So in essence the above benchmarks are useful isofar that it is measuring generic json performance but if you want to transfer large amounts of data via JSON the general pathway is definitely not the best one.#2022-04-1113:13Jakub Holý (HolyJak)@UDRJMEFSN I guess there is a typo in https://cnuernber.github.io/dtype-next/tech.v3.datatype.char-input.html#var-read-json or I just do not understand the sentence; I guess "has" -> "and":
> :mixed produces a mixture of persistent maps has hashmaps and is nearly as fast as :raw#2022-04-1212:33chrisnDefinitely a typo - thanks.#2022-04-0717:44jmvHello! Happy to share the first release of https://github.com/nytimes/jsonlogic, a JsonLogic implementation for Clojure.#2022-04-0718:50mjwTIL NY Times uses Clojure ❤️#2022-04-0802:03zaneWould love to hear more about how the Times is using Clojure!#2022-04-0814:49jmvour team is using clojure on the backend to power search platforms. basically our systems power search for product-focused teams at the company.#2022-04-0907:01Matthew Davidson (kingmob)Did David introduce Clojure when he was there?#2022-04-0802:54ambrosebsTyped Clojure 1.0.26 - Extensive improvements, including:
- support reify, satisfies in Clojure
- support defprotocol, implements? in ClojureScript
- support annotating composite predicates like (defn sym-or-kw? [a] (or (symbol? a) (keyword? a)))
https://www.patreon.com/posts/64869793#2022-04-0807:30Daniel SlutskyClay (version 1-alpha1) is a new little attempt to provide some of the visual tooling needs of the emerging data-science stack and community.
https://scicloj.github.io/clay/#/notebooks/intro.clj
It has been growing gradually as a series of small experiments in the #visual-tools group.
In the last couple of years, a few of us have been using Notespace for documentation (literate programming), data exploration, study groups, workshops, etc.
With the emergence of amazing tools such at Portal and Clerk, which are getting lots of attention from both users and maintainers, it seems to make sense to put Notespace on hold, and rely on those amazing tools (and others).
Clay tries to maintain a bit of the Notespace approach, mostly regarding dynamic interaction and way of expression (using the Kindly library), but implement it as a thin convenience layer on top of other tools, allowing one to use the full power of those tools where appropriate.
Lots of Clay's (& Kindly's) attention is around creating a compatibility layer, which allows one to use the same code and render it visually in different tools. This made it possibly, for example, to port the documentation of Viz.clj from Notespace to Clerk (wrapped by Clay) with no code change:
https://scicloj.github.io/viz.clj/#/notebooks/intro.clj
This is still considered experimental. Please share your feedback.
Many thanks to @clark.thomaswilliam, who has been involved in testing and designing the usability aspects (and exploring some implementation details),
to @djblue, @mkvlr, @jackrusher, @philippmarkovics for their patient and wise support with the brilliant tooling they are creating,
to Rohit Thadani and @ezmiller77 for further testing and feedback,
and to the #visual-tools group, which has been supporting and hosting this exploration so far.#2022-04-0807:34Daniel Slutsky(image credit: Wikimedia Commons)#2022-04-0812:35borkdudeclj-kondo v2022.04.08 - static analyzer and linter for Clojure code that sparks joy! ✨
• https://github.com/clj-kondo/clj-kondo/issues/1331: new linter :non-arg-vec-return-type-hint that warns when a return type hint is not placed on the arg vector (CLJ only). See https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#non-arg-vec-return-type-hint.
• Enable :namespace-name-mismatch by default
• https://github.com/clj-kondo/clj-kondo/pull/1611: support ^:replace override for nested config values
• https://github.com/clj-kondo/clj-kondo/issues/1625: Add option --skip-lint, to skip linting while still executing other tasks like copying configuration with --copy-configs.
• https://github.com/clj-kondo/clj-kondo/issues/1620: return type too narrow for re-find
Analysis:
• https://github.com/clj-kondo/clj-kondo/issues/1623: Implement analysis for Java classes: :java-class-definitions and :java-class-usages. See https://github.com/clj-kondo/clj-kondo/blob/master/analysis/README.md.
• https://github.com/clj-kondo/clj-kondo/pull/1635: add :end-row and end-col to analyze data for :namespace-definitions
• https://github.com/clj-kondo/clj-kondo/issues/1651: Improvements for :protocol-impls
• https://github.com/clj-kondo/clj-kondo/issues/1612: Improve analysis for deftype
• https://github.com/clj-kondo/clj-kondo/issues/1613: Improve analysis for reify
• https://github.com/clj-kondo/clj-kondo/issues/1609: keyword analysis for ns + require
channel: #clj-kondo#2022-04-0814:07jumarNice.
Btw. in https://github.com/clj-kondo/clj-kondo/blob/master/analysis/README.md I don't see anything about Java classes.#2022-04-0814:07borkdude@U06BE1L6T Good point, these keys should be added here:
https://github.com/clj-kondo/clj-kondo/blob/master/analysis/README.md#extra-analysis#2022-04-0814:10jumarIt's just because there was See next to it so I thought I would have a look 🙂.#2022-04-0814:11borkdudeClickbait.#2022-04-0910:30niquolaMacro-driven atomic CSS library for Clojure(Script) - https://github.com/HealthSamurai/macrocss#2022-04-0912:33Asko NōmmCan it be used in a way where a parent can target children as well? Let’s say:
div:hover .sub-item ?#2022-04-0918:26niquolaIt can be extended to this!#2022-04-1001:16just.sultanovhttps://github.com/lazy-cat-io/tools.project - a project management tool.
The current features:
- Unify a project manifest
- Collect dynamic metadata of builds at compile time (e.g. uberjar step) and use the metadata at runtime
- Transform a project manifest to io.github.seancorfield/build-clj format
- Manage project version#2022-04-1113:41Jakub Holý (HolyJak)Hi @U1EQNSHL4! Congratulation to the release!
Personally, I would appreciate a brief section explaining the problem the library tries to solve so that I would understand better whether it is something for me and when/why I would want to use it 😅#2022-04-1008:38Matthew Davidson (kingmob)https://clojars.org/org.clj-commons/byte-streams is out, with better support for Graal and clj-easy and an updated Manifold dep. To avoid problems with Graal/clj-easy, all code has been copied out of the top-level single-segment namespace to a nested namespace, and the original top-level ns has been deprecated. Many thanks to @craigy for doing this and @p2b for bringing up the issue.#2022-04-1012:45ericdalloAnnouncing new lib https://github.com/clojure-lsp/lsp4clj, a lib that should help create any LSP for any language in Clojure 🎉
This was a result of a refactor on clojure-lsp side, separating the common server code to make that possible.
Thanks @domagala.lukas for the great help of making that possible!#2022-04-1018:18pfeodrippeFuderoso!!!!#2022-04-1321:39dominicmJust to clarify, could I use this to start a TCP lsp server? Then use the nrepl/orchard stuff to handle things like completion?#2022-04-1321:42ericdalloprobably not, this follows Microsoft LSP spec which say the connection should be via stdin/stdout#2022-04-1321:45dominicmIs that distinct from the official LSP spec, which does allow for TCP? (or at least, did?)#2022-04-1321:47dominicm> Servers usually support different communication channels (e.g. stdio, pipes, …). To ease the usage of servers in different clients it is highly recommended that a server implementation supports the following command line arguments to pick the communication channel:
> • stdio: uses stdio as the communication channel.
> • pipe: use pipes (Windows) or socket files (Linux, Mac) as the communication channel. The pipe / socket file name is passed as the next arg or with --pipe=.
> • socket: uses a socket as the communication channel. The port is passed as next arg or with --port=.
> • node-ipc: use node IPC communication between the client and the server. This is only support if both client and server run under node.
From https://microsoft.github.io/language-server-protocol/specifications/specification-current/#2022-04-1322:40ericdalloOh, you are right!
I missed that, ATM lsp4clj only supports stdio, but we could add support for others.
Although, I don't see TCP, would socket suppress that need?#2022-04-1400:42Lukas DomagalaI also assumed stdio was the only option. Node-ipc is probably out since we’re JVM only for now, but socket should be possible.
Websocket seems to also be an option, but it needs a bunch of extra setup: https://github.com/microsoft/vscode/blob/main/src/vs/base/parts/ipc/node/ipc.net.ts#L184-L431
Looking at https://github.com/microsoft/language-server-protocol/issues/604 issue it seems that the LSP server actually has to connect to the client, which is a bit weird, but probably doable.#2022-04-1408:05dominicmTCP and socket are the same.#2022-04-1412:33ericdalloFeel free to open a issue there @U09LZR36F!#2022-04-1019:03Asko Nōmmhttps://github.com/askonomm/clarktown 1.1 - An extensible and modular zero-dependency, pure-Clojure Markdown parser.
Improvements:
• Support setext headings https://github.com/askonomm/clarktown/issues/6
• Make text emphasis better https://github.com/askonomm/clarktown/issues/5
• Add full test coverage https://github.com/askonomm/clarktown/issues/4
• Support triple-dash (`---`) horizontal lines https://github.com/askonomm/clarktown/issues/10
• Support dash (`-`) unordered lists https://github.com/askonomm/clarktown/issues/11
Bug fixes:
• Underscores in link URL’s get rendered into <em>’s https://github.com/askonomm/clarktown/issues/9
• Links break textual checkboxes https://github.com/askonomm/clarktown/issues/8
#2022-04-1410:36Vincent CantinWe (admins) recommend that updates of libraries recently announced should be published in #releases instead.#2022-04-1518:10Asko NōmmOh sweet! Will join that 🙂#2022-04-1120:20Mark WardleAnnouncing https://github.com/wardle/hermes v0.10.533 - an open source SNOMED CT terminology library and microservice. - now with:
• Faster import and indexing including better reification of refset items to concrete types
• Comprehensive generative testing / synthetic SNOMED CT dataset generation using clojure.spec.alpha and clojure.test.generator
• Updates to the graph API functionality (thanks to Wilker Lucio's Pathom)
Also updated partner library/service https://github.com/wardle/hades 🔥that provides a HL7 FHIR facade using hermes.
These are now live in several different deployed clinical applications - within the NHS here in the UK - and for a research project spanning multiple centres in the UK for multiple sclerosis. 😀#2022-04-1120:23niquolaSmall, but useful library for dry data matching in tests - https://github.com/HealthSamurai/matcho#2022-04-1122:12borkdude#nbb ad-hoc scripting for Clojure on Node.js v0.2.9 - v0.3.5
Highlights:
• tools.cli is built-in
• cognitect.transit is built-in
• CLJS compatibility with :require-macros, etc.
• architectural foundation for adding optional features not included by default: https://github.com/babashka/nbb/blob/main/doc/dev.md#features. Thanks @cldwalker for working on this feature.
• New talk on Youtube about nbb: https://youtu.be/7DQ0ymojfLg
Full https://github.com/babashka/nbb/blob/main/CHANGELOG.md#2022-04-1215:15practicalli-johnhttps://github.com/practicalli/clojure-deps-edn user level aliases for Clojure CLI - library version updates and a few removals
• Removed :deps from configuration to avoid over-riding version from install of Clojure CLI
• Removed :inspect/rebl (alias is commented) after deprecating 6 months ago
• GitHub action .github/workflows/lint-with-clj-kondo.yml updated to clj-kondo version 2022.04.08
• Update library versions using clojure -T:search/outated > command (see https://github.com/practicalli/clojure-deps-edn/blob/live/CHANGELOG.org for details)#2022-04-1218:52chrisnIntroducing https://github.com/cnuernber/charred - fast json/csv encode and decode. This library finalizes my research into csv and json parsing and is a complete drop-in replacement for clojure.data.csv and clojure.data.json. Same API, much better (5-10x) performance. This library gets as good performance for those tasks as anything on the JVM and avoids the jackson hairball entirely.
You can find my previous post on fast csv parsing for the reasons why the system is fast or just read the source code. All the files are pretty short. I moved the code from dtype-next into a stand-alone library and added encoding (writing) to the mix so you don't need any other dependencies. Finally this library has the same conformance suite as the libraries it replaces so you can feel at least somewhat confident it will handle your data with respect.
Enjoy :-)#2022-04-1218:56seancorfieldI'm curious why org.clojure/tools.logging {:mvn/version "1.2.4"} is a dependency of it?#2022-04-1218:58chrisnBecause it uses an offline thread to do blocking reads and sometimes that thread may log depending on the situation.#2022-04-1218:58chrisnhttps://github.com/cnuernber/charred/blob/master/src/charred/parallel.clj#L101#2022-04-1219:00chrisnI love tools.logging, btw. Far and away the best logging framework IMO. The whole zero dependencies thing is extremely helpful when it comes to logging systems.#2022-04-1219:04borkdudeI and some other people are looking to extend the tools.logging approach to more libraries like JSON and http clients here:
https://github.com/clj-easy/tools.misc
Feedback is welcome on that!#2022-04-1219:05KelvinDo you happen to have benchmarks, especially against Jackson-based libraries? (I know you've discussed your findings with the community, but would be nice to have results in one place.)#2022-04-1219:06chrisnhttps://github.com/cnuernber/fast-json#2022-04-1219:11KelvinI see. So was Charred extracted from the larger dtype-next library?#2022-04-1219:13chrisnYes - and I added writing the formats efficiently. I thought it would be more palatable to many people if the library was small and exact and had more minimal deps. dtype-next is specifically targetted towards HPC and thus it has somewhat more dependencies and many dependencies unrelated to reading or writing csv and json data.#2022-04-1219:15chrisnI guess additionally I feel like charred is a good library to learn techniques from as it is precisely targetted. dtype is a bit of a battleship.#2022-04-1219:35kennytilton➕ on the name.#2022-04-1219:40domparryI am unreasonably excited about this.#2022-04-1219:41domparryIt's going to be great to get rid of Jackson dependencies for my etl pipelines. Thanks so much Chris.#2022-04-1219:47chrisn@U1S4MH05T - That is great!! The fastest pathway for parsing is to create a https://cnuernber.github.io/charred/charred.api.html#var-parse-json-fn with the options you want and call that. It turns out for parsing small json blobs simply mapping the options map to a parser is a significant portion of the parse time. That function is safe to use in a multithreaded context so you probably only need to ever create one.#2022-04-1219:51domparryThat's terrific! We're also parsing a LOT of json in our normal database and message queue usage of the Google cloud api, so this will give us a great lift in performance there too.#2022-04-1219:56richiardiandreaThis is an awesome library! FWIW, a way to be more flexible w.r.t. logging is to be able to pass a log function as option. I so like this approach that I could not stop sharing it 😄#2022-04-1219:57chrisnThat is a great point. Then I could say it has zero dependencies 🙂.#2022-04-1220:10flowthingThis looks fantastic — thanks for making it!#2022-04-1221:19kennytiltonLooks a little better than twice as fast as c.data.csv on a couple of 30-60k, 3-column, CSVs I am inhaling. 🏎️#2022-04-1221:47chrisnTry :async? false#2022-04-1221:49chrisnAnd a smaller buffer size#2022-04-1221:49chrisn:bufsize 8192#2022-04-1221:52chrisnThe test csv was 1.7Gb#2022-04-1221:52chrisnSo the system is tuned for larger files #2022-04-1221:53chrisnAlso - use the supplier interface that avoids creation of persistent vectors#2022-04-1222:18chrisnI guess at those sizes you can just load things into memory in an offfline thread pool and just parse the actual strings.#2022-04-1223:20kennytiltonThx! Don't mind me, I am just an applications guy. I thought 2X was great! 🙂 Now I have maybe 100x faster,
For one, I started with:
(with-open [reader (io/reader "subtlex-lite.csv")]
(doall
(rest
(charred/read-csv reader))))
This is the 100x improvement:
(charred/read-csv (java.io.File. "subtlex-lite.csv")
:async? false
:bufsize 8192)
Not having luck finding a replacement for this in the doc:
(json/parse-stream ( "wordnet.json") true)
I stole this from the test suite:
(let [input (java.io.File. "wordnet.json")]
(charred/read-json input :key-fn keyword))
Gives me:
Execution error at charred.JSONReader/readObject (JSONReader.java:375).
JSON parse error - unrecognized 'null' entry.
Anyway, 100x, not too shabbly! 👏#2022-04-1223:23chrisn100X is amazing actually - That error means something started with 'n' and didn't finish with 'ull' - I really should print more context there. Is that json file accessible publicly?#2022-04-1223:32kennytiltonWordnet: https://wordnet.princeton.edu/download/current-version
The so-called synset IDs are indeed strings like "n.123456".
The 100x came on https://www.ugent.be/pp/experimentele-psychologie/en/research/documents/subtlexus I believe I grabbed the 75k Excel 2007 version then deleted all but a new words in OS X Numbers, then exported as CSV>#2022-04-1223:38kennytiltonActually, I recall I got my json version from here: https://github.com/fluhus/wordnet-to-json#2022-04-1223:39kennytiltonThat ^^ conveniently knits everything together in one JSON file.#2022-04-1223:40kennytiltonSpecifically wordnet.json.gz from here: https://github.com/fluhus/wordnet-to-json/releases#2022-04-1300:22chrisnPerhaps that is JSON5. The JSON spec I targeted requires all strings including map keys to be quoted. I will however check it out and get it to work - thanks for the heads up :-).#2022-04-1300:41kennytiltonMaybe I am mis-describing the data. Here is the start via less in a terminal:
{
"synset": {
"a1000283": {
"offset": 1000283,
"pos": "s",
"word": [
"admonitory",
"admonishing",
"reproachful",
"reproving"
],
"pointer": [
{
"symbol": "\u0026",
"synset": "a999867",
"source": -1,
"target": -1
},
:
#2022-04-1302:59Ben Sless🎉 https://github.com/cnuernber/charred/blob/master/java/charred/CSVWriter.java#L8#2022-04-1303:12Ben SlessNow the obvious question - EDN reader next?#2022-04-1304:31domparry@U39M2FMKM thread ☝️#2022-04-1306:00robert-stuttafordamazing#2022-04-1312:02chrisn@UK0810AQ2 I thought about edn but I don't know anyone who reads/writes edn at scale. I know plenty of people who process JSON at scale and large CSV files are all over the place.#2022-04-1312:06Ben Sless@UDRJMEFSN besides all of use reading and compiling clojure every day. Faster compiler and tools?#2022-04-1313:10chrisn@U0PUGPSFR - Wordnet found 2 issues related to reading data right at the edge of one buffer leading to the next. New version - 1.001 🙂. Great testcase - lots of escaped data and quite large.#2022-04-1313:12chrisn@UK0810AQ2 - OK now you are talking but that is a bit more involved than faster edn/lisp readers. That involves looking at the entire architecture of the Clojure compiler itself as reading the source code is like 1 step out of 5.#2022-04-1313:12chrisnI am sure Rich would love it if I forked Clojure and started making aggressive changes 🙂.#2022-04-1313:20chrisnIf I were going to speed things up I would speed up the time it takes to compile dtype-next and core.async. core.async, once required is a 3+ second hit I think due to the compilation of macros and such. dtype-next is a 1.5 second hit at least with the dataset library doubling it - faster require time of those would be beneficial to me and to new people comparing the system against pandas and dplyr. So I think that would involve looking at the macro execution pathway and seeing if I can find some gain there. I guess it would start with the edn and lisp readers however.#2022-04-1315:20Ben Sless@UDRJMEFSN did you by any chance profile this?#2022-04-1315:34chrisnI have only roughly profiled it. The document on https://cnuernber.github.io/dtype-next/datatype-to-dtype-next.html goes into what I found. Going from dtype v2 to v3 halved the require time and I figured this stuff out by starting a blank repl and then timing the require statement.#2022-04-1315:35chrisnI have not (yet) figured out a way to profile this stuff meaningfully aside from starting a jar with a main function that does a dynamic require and that is fairly tedious but doable as visualvm allows you to profile an executable startup up.#2022-04-1315:37Ben SlessDoesn't have to be a jar, you can even pass the flag to clj and eval the require expression#2022-04-1315:37chrisnOh rly? I hadn't considered that. That is very useful.#2022-04-1315:37Ben Slessclj -J-(visual VM flags) -e (require ...)#2022-04-1315:42chrisnI wonder then if visualvm is the best option. We are getting into where I would just want a data file produced and a tool to look at it. Do you have a suggestion for a tool for that type of profiling?#2022-04-1315:45Ben SlessJFR, attach to JVM at startup, capture recording to file, analyze and share freely#2022-04-1315:50Ben Sless-XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:StartFlightRecording=duration=60s,filename=myrecording.jfr
#2022-04-1316:05chrisngot it- you are extremely helpful - thank you!#2022-04-1316:06Ben Slessclojure -J-XX:+FlightRecorder -J-XX:StartFlightRecording=duration=20s,filename=myrecording.jfr -Sdeps '{:deps {org.clojure/core.async {:mvn/version "1.3.618"}}}' -M -e "(require '[clojure.core.async])"
Glad I could help 🙂#2022-04-1317:10kennytilton"I am sure Rich would love it if I forked Clojure and started making aggressive changes 🙂."
Great, @UDRJMEFSN! I'll add the OOP module! GDR&H#2022-04-1320:03chrisn@U0C8489U6 - Now zero deps for real 🙂. Thanks for the idea, log-fn is totally fine for this use case.#2022-04-1320:12richiardiandreaNiiiice#2022-04-1320:36domparryAlready integrated into our data pipelines. 🙂 And just upgraded to the zero dep version. 😄#2022-04-1321:10chrisnFortune favors the bold 🙂.#2022-04-1405:34Ben Sless@UDRJMEFSN any chance for readers for arbitrary data sources? Especially byte arrays and input streams? Currently all parsing is done in terms of chars and strings, any reason not to use bytes?#2022-04-1405:37Ben SlessWould you like me to open an issue for that?#2022-04-1412:30chrisn@UK0810AQ2 - If you pass in something that is not a string or an char[] the system attempts to make a reader out of it. This allows it to parse input streams and http://java.io.File's and such. Is that what you are looking for? So for instance for the large wordnet.json Kenny used earlier you just do (read-json (http://java.io.File. "wordnet.json) :async? true) and off you go. More abstractly you could create a CharReader from anything that can supply a sequence of character arrays.#2022-04-1412:31chrisnhttps://github.com/cnuernber/charred/blob/master/src/charred/api.clj#L165#2022-04-1412:32chrisnPut another way anything that http://clojure.java.io can turn into a reader is fair game.#2022-04-1412:51chrisnOne thing I think is an issue is a file that starts with the unicode BOM. All the systems I have seen have specific handling of that and I have none so I imagine those files will fail.#2022-04-1413:56Ben SlessSince you're using a buffer I guess the parser is still shuffling some data around. I thought that parsing bytes directly could help avoid casting and copying#2022-04-1414:58chrisnIf you knew you were only going to parse files of a particular encoding then perhaps but my guess is the actual decoding of the byte information into characters is a very minor part of the overall time. the :async? flag allows you to move that conversion to an offline thread and that helps with larger files. You could use a stream of bytes and an encoder and this is how https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/java/lang/String.java#L157 do it. What makes the parsers fast, however, is implementing things like parsing strings or numbers into https://github.com/cnuernber/charred/blob/master/java/charred/JSONReader.java#L134. My guess is that doing the decode from bytes to chars in those loops would not be an overall win as you would increase the code size in each loop. I could definitely be wrong on this, however.#2022-04-1415:00chrisnReading from bytes has the strong advantage of fitting twice as much data into the cache and in this realm that could actually be nearly a 2x gain.#2022-04-1415:04chrisnPotentially you could write the parser to work from byte data and just encode chars that are uninteresting to the parser as a special byte value in a lot of cases. I don't know, you would want to make sure there was a potential win there before committing real work to trying it out.#2022-04-1415:08chrisnString.java has some very interesting information in the comments, btw.#2022-06-0220:22domparry@U11BV7MTK ☝️#2022-04-1223:16ambrosebsTyped Clojure 1.0.27 - Check your programs without depending on typedclojure! https://www.patreon.com/posts/65065388
Also includes fixes to malli->type translation and other improvements.#2022-04-1323:25ambrosebsHere's a fleshed out tutorial on how to type check a Clojure library without introducing a runtime dependency on Typed Clojure https://github.com/typedclojure/typedclojure/tree/main/example-projects/zero-deps#2022-04-1407:15pezIt is my great pleasure to announce that the Calva team is reinforced with two amazing community members: @corasaurus-hex and @domagala.lukas! 🎉 calva
Cora and Lukas are both pure pleasures to cowork with. Added to that, they bring expertise, focus on details, and a quality mindset. Calva is both more useful and more maintainable thanks to them. And, as members of the #calva channel already know, they also strengthen our user support lines.
As someone who cares deeply for Calva and its users, Cora and Lukas joining makes me happy beyond my ability to express it in words.
I'm also super happy that I let @lorilynjmiller have the scoop. I so enjoyed this conversation!#2022-04-1407:37leifericfYay! Calva is an incredibly important project for the Clojure community, especially when it comes to making Clojure available to a broader audience of newcomers. And you're doing a fantastic job with development, user support, and marketing. I'm glad to see more skilled people join the team. Congratulations to everyone!#2022-04-1408:18Ben Slessbsless/clj-fast v0.0.11 - opportunistically faster Clojure core functions
https://github.com/bsless/clj-fast/releases/tag/v0.0.11 includes:
• bug fix in assoc-in inliner which couldn't expand falsey values
• benchmarks rewritten with JMH
• definline which also accepts multiple arity signatures#2022-04-1408:25Ben SlessThe sanic reactions :rolling_on_the_floor_laughing:#2022-04-1409:14vlaaadgraphql-party Announcing first release of https://github.com/vlaaad/plusinia — a complementary library to https://github.com/walmartlabs/lacinia that solves N+1 problem when fetching data. In short, it replaces Lacinia resolvers (input value -> output result) with Plusinia fetchers (set of input values -> map of input value to output result).#2022-04-1413:42nottmeyHi @U47G49KHQ exactly what I was looking for, so thank you for sharing!
In case one is using Lacinia with Datomic, the N+1 problem does not have that much impact, right? I man when resolving the database is mostly already in process. :thinking_face:#2022-04-1413:45vlaaadDepends on Datomic version I guess? This library was developed for a project that uses Datomic Cloud (i.e. every query is a network request)#2022-04-1413:56nottmeyOk, I see. I thought some parts of the database are (preloaded) held in process, even in datomic cloud, so not every query is a network request, but I don’t have a complete understanding of datomic yet.
I guess I need to monitor my setup once it has significant load to see whether I need to optimize this already.#2022-04-1414:59orestisLove the name!#2022-04-1414:59Daniel JompheIf you use the Ion deployment model, your app deployed as Ions is loaded directly inside Datomic Cloud's clojure process, where it has locality to the process's datoms in RAM. Your app's code inside Ions uses the Client API but no networking is implied between your code and the local Datomic Cloud process.
Many people seem to use Datomic Cloud without deploying their apps as Ions. When they do so, they use the client API through the network.#2022-04-1420:27niquolaAwesome, shouldn’t it be just a part of Lacinia?#2022-04-1607:17Chris McCormick🦊 I'm pleased to announce Sitefox v0.0.4 is out. \o/ Sitefox is a backend framework for ClojureScript on Node.
This release has a big new feature: email & password based authentication.
You can add email based auth, including reset password, email verification, etc. to your app with 3 lines of code:
(auth/setup-auth app)
(auth/setup-email-based-auth app template "main")
(auth/setup-reset-password app template "main")
The other big change is documentation. You can find the detailed codox docs here:
https://chr15m.github.io/sitefox/
Finally, I also added some inline tests to the codebase for critical functions like the crypto used for auth.
Here is the release tweet for those inclined: https://twitter.com/mccrmx/status/1515227749094354944#2022-04-1610:07blueberryClojure Sound is a library for transforming digital media and communicating with MIDI devices. https://github.com/uncomplicate/clojure-sound
I haven't written documentation for each function yet, but the whole https://docs.oracle.com/javase/tutorial/sound/TOC.html is covered as https://github.com/uncomplicate/clojure-sound/tree/master/test/clojure/uncomplicate/clojure_sound, which is even more useful because it shows how each function works in context of real use cases.#2022-04-1814:18athosPogonos 0.2.0 is out! https://github.com/athos/pogonos
Pogonos is another Clojure(Script) implementation of Mustache templating language. The biggest change in 0.2.0 is the new API to call functions from the Clojure CLI with the -X/`-T` options, like clojure -X:template render (rendering) or clojure -X:template check (syntax checking for Mustache templates).#2022-04-1913:09baptiste-from-parisHello folks, it’s old (3 days!) news but @cgrand and I have released ClojureDart. It’s a Clojure compiler to Dart. The goal is to leverage Flutter and write native mobile applications on iOS/Android/macOs/linux/windows
It’s alpha and does not have a REPL yet but we do support hot-reload !
Give it a try !
https://github.com/Tensegritics/ClojureDart#2022-04-1914:21Eugenhi, tried it out already.
Works great.
Biggest issues where setting up my environment for Android development.
Congrats !#2022-04-1914:53baptiste-from-paristhanks ! what was hard with Android ?#2022-04-1915:00EugenI had to setup flutter and dart.
Dart was simple, with flutter I had some issues.
I ran flutter doctor and it was not detecting command line tools and such.
I had to open Android Studio IDE (Bumblebee) to install them.
I was expecting CLI setup all the way.
Bumblebee seems o have changed some things so advice on stack overflow and other guides are not very accurate.
After that it was not detecting emulator.
Had to add it to $PATH.
After that it was not detecting avds (emulator images).
This took some trial and error until I got something working for my machine - Installed about 5 avd system images.
I did try to follow official installation docs.
ClojureDart App was visible in emulator.
Reload only worked after pressing Enter key - thanks for putting that there.
I did no know how to build my app as APK - this would be nice to add.#2022-04-1915:02baptiste-from-parisOk, this is mostly related to flutter though. I’ve had issues in the past with Android Studio#2022-04-1915:02baptiste-from-parisI don’t use it anymore and just go with genymotion or a real device, the experience is way better#2022-04-1915:03Eugenok, as a noob I don't know how to use those 😞 - I followed the official recommendations#2022-04-1915:05baptiste-from-parisoh, ok. Thanks for the review, it helps. Maybe you can make a PR on the documentation ? Might be good to leverage this recent experience.#2022-04-1915:06Eugenok, I'll give it a shot.#2022-04-1915:00andy.fingerhutAn updated version of the Clojure cheat sheet has been published, which includes the new functions from Clojure 1.11 that we expect would be most commonly used: https://clojure.org/api/cheatsheet#2022-04-1915:26Noah Bogarti forget about this, what a banger of a cheatsheet#2022-04-1917:07andy.fingerhutChange log here for anyone interested in details of changes made: https://github.com/jafingerhut/clojure-cheatsheets/blob/master/src/clj-jvm/CHANGELOG.txt#2022-04-1917:56dgb23I like the 404 page on clojuredocs:
https://clojuredocs.org/clojure.core/iteration#2022-04-1917:58andy.fingerhutYep. Pretty cool failure until they update ClojureDocs to include the new things in 1.11, which has an issue for it already: https://github.com/zk/clojuredocs/issues/238#2022-04-1918:00dgb23Just to be sure:
I assumed that (clojuredocs has the version on the top right) - I was referring to the picture shown on 404.#2022-04-1920:17lreadhttps://cljdoc.org/ now has new search features!
Searching for libraries on the main page, among other tweaks, now:
• ranks results by library popularity
• matches by substring, so a search for corfield will now find Sean’s many works!
And now, thanks to @corasaurus-hex, you can also search within the docs of the library you’ve selected! Quickly find:
• namespaces, vars, etc
• and articles!
Give it a whirl and let us know what you think over at #cljdoc.#2022-04-1920:21borkdudeHow is "library popularity" defined?#2022-04-1920:29lreadCurrently by clojars download count over the last year or so.#2022-04-1920:31lreadWe don’t have stats strategy for artifacts hosted on maven central yet, so they are currently very popular by default. simple_smile#2022-04-1921:18djblueAwesome addition! 👏#2022-04-1921:19borkdudeCan I also request a library removal? borkdude/sci should not pop up and certainly not above org.babashka/sci, since that library moved organizations.#2022-04-1921:29lreadGood question. Not currently. The libraries are sourced from clojars. I’m guessing that borkdude/sci has had more downloads in the last year than org.babashka/sci.
Maybe we need to give that https://github.com/clj-easy/lib-deprecations idea some more love/thought.
If cljdoc knew a library was deprecated, it could reduce its rank - or omit it from results.#2022-04-1921:29lreadOr if we could reliably figure out a library was relocated, we could use that info.#2022-04-1921:32borkdudeI'm considering one more release where I just throw an exception on load and the README only contains: moved ;)#2022-04-1921:33lreadEffective!#2022-04-1921:35phronmophobicI'm not saying that using LATEST as a version is a good idea, but wouldn't that immediately break everyone that uses LATEST as their sci version? It's probably good to encourage people to update, but I'm not sure forcing everyone to update RIGHT NOW is the best.#2022-04-1921:36borkdudeIf they were using LATEST they could change it to the last version to fix the problem. Using LATEST is a bad idea anyway#2022-04-1921:37borkdudeAnother idea I had is to just print a message on load, which is a weaker form than throwing#2022-04-1921:38borkdudeOr they could change to org.babashka/sci LATEST ;P#2022-04-1922:08lreadNot that anybody is asking but… I think LASTEST is latest release including snapshots and RELEASE is latest non-snapshot release.#2022-04-1922:20Cora (she/her)oh that's good to know#2022-04-1922:24borkdudeyes, and both are not officially supported by tools.deps and will be phased out of mvn eventually too#2022-04-1922:25lreadyup#2022-04-2007:07leifericfAwesome! This is a game-changer for beginners looking for libraries. Another thing that would be amazing: Visualize all libraries in a graph, clustered by two different aspects:
1. How similar libraries are in terms of which problem they solve.
◦ Example: Libraries like Transit, Nippy, and Fressian would likely be spatially close.
2. How often libraries are used together in the same project.
◦ Example: Libraries like Ring, Compojure, Reitit, Re-agent, and Re-frame would likely be spatially close.
Perhaps no. 1 could be solved by allowing library authors or community members to add a “category” and “similar to” links to libraries. A more sophisticated approach might be to cluster libraries by recognizing similar function signatures and names within the library sources. Maybe no. 2 could be done by mining dependencies from Clojure repos on GitHub.
These additions would allow people to see which library alternatives are available and how they tend to be composed. And it would also help people find reference projects.#2022-04-2007:20leifericfIt would also be super cool if we could somehow link videos (i.e., from YouTube) and blog posts to library docs. That would make it easier for people to discover relevant conference talks, screencasts, tutorials, etc. I’m not sure if or how that could be automated, however. Perhaps links to Clojure content would need to be crawled, then manually curated and linked to libraries by the community through some web interface.#2022-04-2207:36Jakub Holý (HolyJak)Awesome work, @UE21H2HHD! Thank you so much!#2022-04-2212:29lreadHey, your foundation was a great help @U0522TWDA ❤️#2022-04-2011:47timrichardtI'd like to announce hicgql [io.github.timrichardt/hicgql "0.1.0"] , a tiny library I wrote to create GraphQL documents in ClojureScript.
It's modeled after Hiccup and should cover the whole GraphQL spec.
https://github.com/timrichardt/hicgql#2022-04-2014:43wilkerlucioHello, announcing a new update of Pathom 3, version 2022.04.20-alpha is out! Updates on this version:
• Fix unnecessary resolver calls due to merging OR branches optimization
• Add check on OR nodes to test for expectation done before start running
• Upgrade guardrails to have its own Kondo configuration
https://clojars.org/com.wsscode/pathom3#2022-04-2016:20mkvlrJust released released Clerk io.github.nextjournal/clerk {:mvn/version "0.7.418"} with:
• 🧑🎨:skin-tone-3: Use viewer api to enable full customization of markdown nodes, see https://twitter.com/mkvlr/status/1509189879464398862 🐦
• 🗂️ Table of Contents & 🌘 Dark Mode, see https://twitter.com/mkvlr/status/1509190548212666371 🐦 and https://snapshots.nextjournal.com/clerk/build/dfe82af312b2aea91d1dc7d1cbbbadc4660be49c/index.html#/notebooks/viewer_api.clj
• ➕ And more, see full https://github.com/nextjournal/clerk/blob/dfe82af312b2aea91d1dc7d1cbbbadc4660be49c/CHANGELOG.md#07418-2022-04-20.
Get it https://clojars.org/io.github.nextjournal/clerk/versions/0.7.418. Follow up in #clerk.#2022-04-2105:52plexusNew Java releases are out which fix a critical security vulnerability. https://neilmadden.blog/2022/04/19/psychic-signatures-in-java/#2022-04-2105:54plexusI'm not really sure yet to what extent widely used Clojure libaries are impacted by this, but I do see that buddy uses some of the affected classes. If you're using buddy, especially with JWT, I would not wait to upgrade. In general if you're running an app exposed to the internet I would not wait to upgrade.#2022-04-2105:55plexusNote that this impacts Java 15 and later, if you're still on 8 or 11 (as many are) then you are not currently vulnerable.#2022-04-2106:08seancorfieldNot all of the JDK providers have updated binaries yet...#2022-04-2106:14Cora (she/her)temurin is in progress https://github.com/adoptium/adoptium/issues/139#2022-04-2106:15Cora (she/her)you can track it per platform here https://github.com/adoptium/adoptium/issues/140#2022-04-2107:55jumarI played with it a bit here: https://github.com/jumarko/clojure-experiments/blob/master/src/clojure_experiments/security/signing.clj#L1
I wasn't able to reproduce the problem when using buddy-sign but that's probably just because of the lack of skill.
As others said, I wouldn't wait with the upgrade.#2022-04-2206:31javahippieThe Temurin Build and Release Process is really taking its time 😕#2022-04-2207:32Cora (she/her)@U06BE1L6T buddy uses bouncy castle which isn't vulnerable to this #2022-04-2207:50jumar👍#2022-04-2208:08plexusThat's for buddy-hashers, how about buddy-sign?#2022-04-2208:09plexus:ecdsa+sha256 #(Signature/getInstance "SHA256withECDSA" "BC")
:ecdsa+sha256 #(Signature/getInstance "SHA256withECDSA" "BC")
:ecdsa+sha384 #(Signature/getInstance "SHA384withECDSA" "BC")
:ecdsa+sha512 #(Signature/getInstance "SHA512withECDSA" "BC")
:ecdsa+sha384 #(Signature/getInstance "SHA384withECDSA" "BC")
:ecdsa+sha512 #(Signature/getInstance "SHA512withECDSA" "BC")
#2022-04-2208:11jumarThanks plexus, a good reminder to not to accept quick answers without checking 🙂
It may still be that buddy isn't vulnerable at all but I wouldn't trust myself to claim that.#2022-04-2208:16plexusyeah same here, I have not dug deep enough to confirm that it's vulnerable or not, but at a cursory glance it could be#2022-04-2209:41arohnerhttps://github.com/griffinbank/rules_clojure, a library for building and testing using Bazel#2022-04-2503:29bedersCurious to know how much faster builds got when adopting bazel. #2022-04-2511:34arohnercompilation is about the same, despite bazel compiling in parallel. The killer feature though is test caching. It’s possible for a 2 hour test suite to run in 5 minutes because you can run tests in parallel locally, and it only runs “dirty” tests, i.e. only run tests for source files that have changed since the last test#2022-05-0113:14sleepyfoxHow do you know which test files are affected by which source files?#2022-05-0212:27arohnerBazel requires you to specify the inputs and outputs of every build action. A test is just a binary that returns 0 or 1, and depends on all source files required to run the test#2022-05-0214:08sleepyfoxOh, so like a make action then?#2022-05-0214:57arohnerSimilar. Bazel uses a sandbox to force your inputs and outputs to be correct. It also has a network attached cache#2022-04-2219:24djblueJust released Portal https://github.com/djblue/portal/releases/tag/0.24.0, a data exploration / navigation tool for clojure.
Some recent highlights include:
- A viewer for clojure.test output
- Improvements to the exception viewer
- A terminal viewer for stdout/stderr style output
Drop by #portal with any questions.#2022-04-2511:34arohnercompilation is about the same, despite bazel compiling in parallel. The killer feature though is test caching. It’s possible for a 2 hour test suite to run in 5 minutes because you can run tests in parallel locally, and it only runs “dirty” tests, i.e. only run tests for source files that have changed since the last test#2022-04-2415:30Daniel SlutskyClay is an alpha-stage data visualization and literate programming tooling layer, offering a unified & dynamic workflow around #portal, #clerk, and a #scittle-based renderer.
https://github.com/scicloj/clay
The current version 1-alpha10 of Clay offers some progress with Scittle-based visual documents.
Examples:
https://scicloj.github.io/clay/
https://scicloj.github.io/viz.clj/
It is one of the fruits of our progress at the #visual-tools group, and is also based on very thoughtful discussion and testing by @clark.thomaswilliam, @tsulej, @ezmiller77, and others.
(edit: hashtags)#2022-04-2415:31Daniel SlutskyScittle is such a wonderful way to write web pages.
https://github.com/babashka/scittle#2022-04-2418:56borkdudeThanks! There is also a #scittle channel, feel free to join#2022-04-2513:07magnarsJust pushed a new release of Confair - a configuration library for Clojure. https://github.com/magnars/confair
• Config as EDN, in dev and prod.
• Encrypted secrets in the git repo.
• Masked secrets when logging.
• Check in working local config, with easy overrides.
It now supports encryption/decryption of nested config values.#2022-04-2514:30Alex Miller (Clojure team)Clojure CLI release https://clojure.org/releases/tools#v1.11.1.1113 is available
• https://clojure.atlassian.net/browse/TDEPS-153 - yet more fixes for errors during concurrent Maven downloads#2022-04-2516:28robert-stuttafordjust me or does anyone else wish it was 1111 at the end?#2022-04-2517:17lreadOnes you start, you can’t stop?#2022-04-2714:45pezI am absolutely thrilled to be announcing the 0.0.1 super-WIP version of #joyride together with @borkdude! We are making VS Code hackable in a way almost reaching Emacs levels. Using Clojure instead of Elisp. How do you hack? Easy peasy. Install the Joyride extension in VS Code. Start Joyride's nREPL server. Connect your REPL. Hack away. Or should I say:
Take VS Code on a Joyride. https://marketplace.visualstudio.com/items?itemName=betterthantomorrow.joyride#2022-04-2714:46slipsetCould it be that the link to the docs is off? https://github.com/BetterThanTomorrow/joyride/blob/HEAD/doc/configuration.md gives me a 404?#2022-04-2714:47borkdude@U04V5VAUN PR welcome. This is your chance to becomes one of the initial contributors!#2022-04-2714:47pezHow did that preview appear?#2022-04-2714:48borkdudehaha lol#2022-04-2714:48borkdudethe word HEAD should be replaced with master#2022-04-2714:48slipset#2022-04-2714:49pezPlease use the hashtag #vsjoyride on Twitter when telling the world about this, Clojurians. You are going to tell the world, right? gratitude#2022-04-2714:50borkdude@U0ETXRFEW Are you going to announce it on Twitter? Can't wait to RT you ;)#2022-04-2714:54russmatneyamazing!!!#2022-04-2714:59pez@borkdude you retweeted almost before I had submitted! 😃#2022-04-2714:59borkdudeI'm that eager#2022-04-2715:04borkdude@U04V5VAUN The link should be fixed on the next version in the marketplace#2022-04-2715:09leifericfHold up, did you guys just make an extension to make extensions in Clojure 😅 Awesome stuff.#2022-04-2715:09borkdude😎#2022-04-2715:12ericdalloAwesome!
Let's do another one for Emacs and vim 😂
Clojure to extend them all#2022-04-2715:12borkdudevim should be doable (for neovim via rpc)#2022-04-2715:15pezTo make you don't need extensions @U01PE7630AC 😃#2022-04-2715:26Eugenman .. just when I decided to give Emacs a try 🙂#2022-04-2715:39pezI've heard that ELisp is not as joyful as Clojure is. 😃#2022-04-2715:41Eugentrue, but they have org-mode - which is my main driver for it (I'm not dropping Calva 🙂 )#2022-04-2715:42borkdude@U011NGC5FFY There's no reason to choose just one religion ;)#2022-06-1316:16richiardiandreaNice thanks for that, we'll test in our CI and report back in case!#2022-06-1316:23javahippie@U0C8489U6 Always happy about feedback (our CI already uses the new version)#2022-06-1322:31richiardiandreaIt seems like CI is happy here - cool stuff!#2022-06-1221:18borkdude#nbb - Scripting in Clojure on Node.js using SCI. v0.3.6 - v0.5.115
A lot happened in the past two months - you can read the https://github.com/babashka/nbb/blob/main/CHANGELOG.md for the details.
An exciting new feature was implemented today during a trainride from Berlin (#clojured to home):
Nbb now comes with https://github.com/babashka/nbb#prismaticschema and https://github.com/babashka/nbb#metosinmalli as optional separate npm dependencies!
https://github.com/babashka/nbb#prismaticschema
https://github.com/babashka/nbb#metosinmalli
An implication of this is that we can add more built-in open source libraries to nbb in the future, without bloating the default npm package.#2022-06-1413:38Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.11.1.1129 is now available
• Fix directory context of -X:deps prep with transitive local deps#2022-06-1414:11Dumchhttps://github.com/Liverm0r/DartClojure translator https://github.com/Liverm0r/DartClojure/releases/tag/0.2.0.
Support: for in, switch, try-catch.
Do not insert material aliase on core classes like Duration, Uri, Set .
Substitutes print with dart:core/print.
Instead of fails,
returns :unidiomatic on while, for with modifications, switch with continue.
returns :unknown for enums.#2022-06-1509:45genmeblogTablecloth 6.088 (https://clojars.org/scicloj/tablecloth) - a dataset/data frame manipulation library updated.
• Small dataset creation fixes
• joins refactored to enable join on different columns
• cross-join, expand and complete (last two known from tidyr) added (docs: https://scicloj.github.io/tablecloth/index.html#Cross)#2022-06-1511:53otfromAwesome. Thanks!#2022-06-2008:43genmeblog6.090 is the newest one (with a bugfixes)#2022-06-2012:27otfrom@U1EP3BZ3Q thx for this. has this been pushed yet? I don't see it on clojars#2022-06-2012:31genmeblogomg... indeed! Give me 20 minutes.#2022-06-2012:32otfromthx 🙂#2022-06-2012:32otfromwanted to give the new complete a go#2022-06-2012:35genmebloggreat! I need it to be tested 🙂#2022-06-2012:36genmeblog6.090 is on Clojars now (verified!)#2022-06-2012:36otfrom🆒#2022-06-2012:41otfromlooks good so far 🙂 . I've put the results in the zulip thread https://clojurians.zulipchat.com/#narrow/stream/151924-data-science/topic/complete.20ala.20R/near/286789226#2022-06-2012:42genmeblogThanks!#2022-06-2012:51otfromok, that was a lot faster than the bad version I wrote using combinatorics and tc/concat 🙂#2022-06-1612:27Ivar RefsdalI'm pleased to announce https://github.com/ivarref/mikkmokk-proxy, an unobtrusive reverse proxy that does fault injection at the HTTP layer. It can be used to test the resiliency of your services.
mikkmokk can:
• Insert faults (before or after) accessing the destination.
• Add delays (before or after) accessing the destination.
• Make duplicate requests.
It can be instructed when and if to inject faults by:
• Statically using environment variables.
• One-off errors using the admin API. The admin API also supports setting new defaults.
• The client using http headers per request.#2022-06-2008:30Jakub Holý (HolyJak)I typically use https://github.com/shopify/toxiproxy that works at the TCP level. Great to add another tool to my toolbox!#2022-06-2015:18Ivar RefsdalThanks 🧡 !
I've linked toxiproxy and some other tools under https://github.com/ivarref/mikkmokk-proxy#alternatives-and-related-software.
I don't have much experience with toxiproxy nor the other tools yet though.#2022-06-2015:19Ivar RefsdalPS I did read your https://blog.jakubholy.net/2017/05/09/simulating-network-timeouts-with-toxiproxy/ from 2017 when researching this. Great post, thanks!#2022-06-2015:22Jakub Holý (HolyJak)My pleasure! I saw the list of related tools eventually :-) Thank you for it, I have to check those out too.#2022-06-1614:18eskosTriplicate release of git-revisions (formerly lein-git-revisions):
> Generate software revision strings based on Git and system context data.
git-revisions is a DSL driven tool for generating version strings based on available metadata such as git tags, commit SHAs and counts, environment variables and current date and time paired with possibility to automate the whole next version resolving logic - in fact all the related project repositories are self-recursive, as a developer I do not set the version strings manually at all.
The logic is now split and there are three possible ways to use the tool:
• https://github.com/esuomi/git-revisions 1.2.0 is the reworked core only
• https://github.com/esuomi/git-revisions-lein 1.1.0 provides the tool as Leiningen plugin
• and finally the motivator for this split, https://github.com/esuomi/git-revisions-buildtools 0.1.0 which provides the tool as tools.build friendly version#2022-06-1614:40mpenetnew https://github.com/exoscale/coax version available (improves ex-data in coax/coerce!)#2022-06-1614:44mpenethttps://github.com/exoscale/tools.project also went through a number of bugfixes/additions this week (template init, prep-tasks etc).#2022-06-1614:45DumchDart->Clojure translator https://github.com/Liverm0r/DartClojure/releases/tag/0.2.2 (allow file translation).
Thanks to @borkdude for help 🙌
Now it's only m1 and aarch64, but there is a docker file and a script to build it locally (https://github.com/Liverm0r/DartClojure#contribution).
P.S. also allowed file translation like:
./dartclj -p path/to/main.dart#2022-06-1614:45Dumchhttps://twitter.com/ArturDumchev/status/1537446007822159876?s=20&t=rRrKgUnTM7Gv0fqUY3RgTg#2022-06-1614:46Dumch@U2N9GDB1U @UKFSJSM38 what's needed to get it to work with emacs? (I am not a Emacs user)#2022-06-1614:48pezCool with a native build! Maybe we should publish an npm module as well? (I say ”we” because I could do some of that work, if you like.)#2022-06-1614:50ericdallo@UL05W6AEM I think we can create a emacs package that calls the native binary :)
I did something similar to #jet but it was so sinole that it didn't need a package, only a simple emacs function, even so a package sounds nice#2022-06-1614:52Dumch@U0ETXRFEW, would be great if you help 🙂
@UKFSJSM38, before you were asking if it would be possible to translate files. I can now write a function to support it, but I don't know if it is really neded#2022-06-1614:53ericdalloYeah, supporting both a file/files and a text string sounds useful for the plugin, simar to #jet cli#2022-06-1614:54DumchOk, I will support it in the next release#2022-06-1619:41DumchAdded file translation support, update header#2022-06-1705:26pezHaving some progress with the npm build.#2022-06-1817:00pezhttps://github.com/Liverm0r/DartClojure/pull/13#2022-06-1900:45DumchThank you! I will check it tomorrow#2022-06-1619:51borkdudeA new version of #jet: a command line tool to convert between JSON, EDN and Transit!
v0.2.18 (the 18th release!)
It now colorizes output automatically when you are connected to a terminal.
And it also supports specter now:
$ echo '{:a {:a 1}}' | ./jet -t '(s/transform [s/MAP-VALS s/MAP-VALS] inc)'
{:a {:a 2}}
And also, there's an ARM (M1 compatible) binary now when you install it via brew!
And lastly, there are --thread-first / -t and --thread-last / -T options to offer a shorter notation than --func / -f
Enjoy! jet
https://github.com/borkdude/jet/blob/master/CHANGELOG.md
Channel: #jet#2022-06-1620:28borkdudeThanks to @U0A74MRCJ who explained to me how I could call the isatty C function from Graal to detect a connected terminal#2022-06-1700:52nateAwesome. That sounds like it would be useful in babashka too. #2022-06-1707:12borkdude@U0510902N "it" = checking if stdout is connected to tty?#2022-06-1714:15nateYeah, to be able to tell if a bb script is in a pipe or run on it's own. #2022-06-1714:29borkduderight. we could expose this stuff in bb. feel free to make an issue#2022-06-1714:31nateWill do#2022-06-1714:35borkdudeThere is also (System/console) btw#2022-06-1714:35borkdudeThat will return nil in a pipe#2022-06-1714:36borkdudeBut it will also return nil when stdin is connected to a pipe. This is why it wasn't sufficient for jet#2022-06-1715:53borkdude#jet is now available for deps.edn too:
https://github.com/borkdude/jet#depsedn
I was able to support both -M and -X/-T style invocations with minimal boilerplate thanks to #babashka-cli :-D#2022-06-1722:21nateIssue created: https://github.com/babashka/babashka/issues/1299#2022-06-1620:44Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.11.1.1139 is now available:
• Add clj -Ttools install-latest api function, examples:
◦ Install tool: clj -Ttools install-latest :lib io.github.clojure/tools.deps.graph :as graph
◦ Update tool: clj -Ttools install-latest :tool graph
• Fix regression with clj -X:deps find-versions from 1.11.1.1119
• Output from clj -X:deps find-versions now provides :git/tag and :git/sha
• Update to tools.tools v0.2.6
• Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.14.1205
(there are also new releases of tools.deps.alpha, tools.gitlibs, and tools.tools)#2022-06-1705:12vemvnvd-clojure - security checker - https://github.com/rm-hull/nvd-clojure/blob/v2.7.0/CHANGELOG.md#changes-from-260-to-270
Maintenance release upgrading DependencyCheck, which helps zapping false positives.#2022-06-1708:26rickmoynihanOh that reminds me, I totally forgot to mention this here… we made an nvd-clojure github action that you can “just” drop into your repo to report dependency check issues.
It currently reports any discovered security vulnerabilities in your dependencies as issues on the repo:
https://github.com/Swirrl/nvd-clojure-gh-action#2022-06-1709:11borkdudeSCI v0.3.30 (the 30th release!)
Clojure/Script interpreter used in projects like #babashka, #jet, #clj-kondo, #4clojure, #clerk, #joyride, #nbb, #scittle etc.
This release brings improvements in sci.async (async eval for CLJS), defrecord and adds some new API functions and types.
https://github.com/babashka/sci/blob/master/CHANGELOG.md#v0330
Channel: #sci#2022-06-1712:22Ivar RefsdalI'm pleased to announce https://github.com/ivarref/double-trouble, a Datomic library for handling duplicate transactions more easily.#2022-06-2006:14bozhidarCompliment 0.3.13 is out with a bunch of improvements https://metaredux.com/posts/2022/06/20/compliment-0-3-13.html Enjoy!#2022-06-2015:34Benjamin@U04V15CAJ this would be sick on bb 😛#2022-06-2015:35borkdudeGive clojure-lsp a try too, it also provides completions in bb projects#2022-06-2011:28Dumchhttps://github.com/Liverm0r/DartClojure#api-with-npm-cli is now available with npm:
$ npm i -g dartclojure
$ dartclojure "Text('works')"
(m/Text "works")
Thanks to @pez for help 🙌#2022-06-2011:43Carsten Behringhttps://clojars.org/scicloj/metamorph.ml (the core machine learning functionality of ) 0.6.2 is out.
It adds the possibility to create ensembles of other pipelines / ML models.
The usage is documented here:
https://scicloj.github.io/scicloj.ml-tutorials/userguide-models.html (last chapter)#2022-06-2114:54athosPostmortem 0.5.1 is out! https://github.com/athos/Postmortem
This release is a minor update that includes a fix for an override warning that occurs on Clojure 1.11.#2022-06-2118:35Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.11.1.1149 is now available
• clj -Ttools install-latest - change git tag sorting and version filtering to better find the "latest" released version of a tool. In general, typical semver numbering style A.B.C or on git vA.B.C will work best. Tags/versions containing "alpha", "beta", "milestone", "SNAPSHOT", etc will be filtered out. Docs not yet updated.
• clj -Ttools install-latest - you can now omit all args to update all installed tools to the latest versions#2022-06-2118:55Jacob O'BryantI'm making the first public release of Platypub, a blogging + newsletter tool (sort of in the same wheelhouse as wordpress, ghost, substack etc). It's built with https://biffweb.com/, and the theme system uses Babashka by default for rendering websites and emails. It's still in quite an early state, but I'm releasing it now because one of the main purposes of building Platypub was so that there'd be an open-source, non-toy project that people can contribute to/read the source code of to help them learn Biff. Going forward I'm planning to encourage others to tackle some of https://github.com/jacobobryant/platypub/issues while I provide direction/code review/pair programming/etc. If that sounds like fun at all, come join the #biff channel!
https://biffweb.com/p/announcing-platypub/
https://github.com/jacobobryant/platypub#2022-06-2208:50borkdudehttps://github.com/clj-kondo/clj-kondo, a linter for Clojure code that sparks joy ✨
v2022.06.22:
• https://github.com/clj-kondo/clj-kondo/issues/1721: new :discouraged-namespace linter. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#discouraged-namespace. Thanks to the amazing @delaguardo
• https://github.com/clj-kondo/clj-kondo/issues/1728 New macOS aarch64 (M1-compatible) binary (brew formula updated!)
• https://github.com/clj-kondo/clj-kondo/issues/1726: fix invalid arity warning for sequence with map multi-arity transducer
• https://github.com/clj-kondo/clj-kondo/issues/1715: fix false positive warning for recur not in tail position with core.async alt!!
• https://github.com/clj-kondo/clj-kondo/issues/1714: fix recur arity for defrecord, deftype and definterface
• https://github.com/clj-kondo/clj-kondo/issues/1718: make unsorted namespaces linter case-insensitive
• https://github.com/clj-kondo/clj-kondo/issues/1722: suppress redundant do in .cljc for just one language
Channel: #clj-kondo#2022-06-2213:56seancorfield@U0NCTKEV8 will be pleased about a couple of those fixes! 🙂#2022-06-2214:29vlaaadInitial release of https://github.com/cljfx/flowless/ — a cljfx wrapper of efficient javafx virtual flow implementation that is similar to list view 🙂#2022-06-2215:02DumchDartClojure https://github.com/Liverm0r/DartClojure/releases/tag/0.2.7 micro release.
Highlights:
- updated global (core) vars, to avoid adding alias-prefix (follow up this https://github.com/Tensegritics/ClojureDart/pull/118);
- use .- for fields; do now wrap with braces methods with no params (follow up this https://github.com/Tensegritics/ClojureDart/issues/116);#2022-06-2215:04seancorfieldWe encourage library maintainers to use #releases for small/frequent release announcements and to try to keep this channel #announcements for major releases, no more than about once per month.#2022-06-2215:05seancorfieldYou already posted a DartClojure release here two days ago.#2022-06-2218:39ericdalloclojure-lsp Released https://clojure-lsp.io/ 2022.06.22-14.09.50 with mainly fixes for consistency and become a even more reliable tool!
Main highlights:
We have a new linter 🎉 integrating with https://github.com/clj-depend/clj-depend, quite useful for projects with a ns stucture stanrdard that should be followed, kudos to @contato794 for the help!
We fixed a bug introduced some releases ago where clojure-lsp could consider target/resources folders as source-paths making find-definition and other features go to those files
Now, clean-ns move reader conditionals to top following other tools
Finally, clojure-lsp should detect changes on files outside editor, like git branch changes, doesn't need to restart the LSP process anymore
We now have Mac M1 native binary thanks to @borkdude’s help!
Thanks for all contributors and sponsors which just help on making clojure-lsp a better tool each release! gratitude
For more details, check #lsp#2022-06-2309:21victorbGood news everyone, Obsidian Wielder has now been included in the official list of community plugins in Obsidian!
Wielder enables you to write Clojure code directly in Obsidian (powered by #sci [ thanks yet again @borkdude for this awesomeness ]), so you can do calculations, render React UIs (via Reagent), use DataView data and much more, directly in your page with full interactivity.
Personally I write little mini-UIs inside my documents in Obsidian. I have one form for adding new TODOs for example, all done directly in my document with Wielder. Whatever you can program a webpage to do, or a Obsidian plugin, you could do directly in your document with Wielder.
Installation instructions for people who want to give it a try can be found here: https://wielder.victor.earth/Tutorials/02-Installation
I've also published the demo-vault as a Obsidian Publish website (which works with Wielder as well!), so you can see how it works a bit by just browsing the website too, introduction tutorial is here: https://wielder.victor.earth/Tutorials/01-Introduction#2022-06-2309:50borkdude@UEJ5FMR6K Amazing :)
Feel free to link your project here:
https://github.com/babashka/sci#projects-using-sci#2022-06-2309:55victorbGood idea 🙂 Patch sent! https://github.com/babashka/sci/pull/769#2022-06-2312:01steffan@UEJ5FMR6K I found a small typo in the link to https://github.com/victorb/obsidian-wielder on page https://wielder.victor.earth/Welcome
victor should be victorb#2022-06-2315:22Colin P. HillThis is cool! Any thought to a #joyride-esque REPL sidebar?#2022-06-2406:55Ferdinand Beyer@UEJ5FMR6K — cool stuff! There’s a typo on your Welcome page, the Github link https://github.com/victorb/obsidian-wielder is missing the b in victorb and gives a 404#2022-06-2408:49victorbThanks @U2C6SPLDS and @U031CHTGX1T for spotting that, has been fixed now!#2022-06-2408:52victorb@U029J729MUP Thanks, I think so too! 🙂 I wasn't aware of Joyride (nvim user), but took a look at the GitHub repository. You mean the pane on the right side in the "Calva.Start.a.Joyride.REPL.and.Connect.-.Jack-in.mp4" video from the README or are you referring to something else?
If that's what you're referring to, I currently see the entire Obsidian document as being that basically, except you can add normal text in-between the REPL evaluations#2022-06-2413:34Colin P. HillI'm just referring to the general idea of having a REPL for hacking on the program live. Trying to do side effectful things in codeblocks in a document might run into issues with code that isn't rerunnable.#2022-06-2413:36borkdudecc @U5H74UNSF ^ this is hinting at the "livedoc" idea too#2022-06-2416:21victorb@U029J729MUP thanks for clarifying further. I think having something to "hack on the program live" would break down the idea that the entire document should be re-runnable from the top, always. Basically, every time you change anything in the document, it tries to eval the entire document from top-to-bottom, a bit like how jupyter works.
The way you would work on "the program" in Wielder would be to write down each instruction line-by-line, which leads you to arrive at the conclusion at the bottom. This already works today and is the core way I myself use Wielder.#2022-06-2811:42pfeodrippeThis is so good!! I'm a obsidian user and wanted something like https://github.com/JeremS/prose, this seems to solve the case \o/#2022-06-2815:02victorbI'm glad to hear @U5R6XUARE! 🙂 Let me know if you encounter any issues or have ideas for new features!#2022-06-2310:38ikitommi[metosin/malli "0.8.8"] is out! #malli is a data-driven data specification library for Clojure/Script. Relevant changed since 0.8.0:
• Big improvements to ClojureScript development-time tooling, kudos to @danvingo
• New guide for doing static type checking with malli + Typed Clojure
• Fixes in clj-kondo mappings
• Improved pretty printing with function instrumentation
• Custom pretty printers via .pretty/prettier
• Lot’s of small fixes, improvements and perf
• New optional and unambiguous lite-syntax for simple cases
(require '[malli.experimental.lite :as l])
{:id string?
:tags [:set keyword?]
:address {:street string?
:city string?
:zip (l/optional int?)
:lonlat [:tuple double? double?]}}
Also, Malli has just passed 1000 ⭐s on github, big thanks to all contributors!
https://github.com/metosin/malli/blob/master/CHANGELOG.md#2022-06-2311:41ikitommibumped up version from 0.8.5 -> 0.8.8 due to deployment challenge. note to self: use github automation for releases#2022-06-2313:45joost-diepenmaatJust released
[nl.jomco/proof-specs "0.1.3"]
A tool to ensure your data specs are all able to generate. See https://git.sr.ht/~jomco/proof-specs#2022-06-2409:08joost-diepenmaatAlso just released [nl.jomco/ring-openapi-validator "0.1.3"] Validates ring requests against openapi (swagger) specs. Includes middleware. See https://git.sr.ht/~jomco/ring-openapi-validator#2022-06-2409:08joost-diepenmaatCan also validate responses :-)#2022-06-2410:36borkdudeAnnouncing org.babashka/http-server {:mvn/version "0.1.4"} - an easy tool to serve static assets during development!
Repo: https://github.com/babashka/http-server
Use with Clojure:
https://github.com/babashka/http-server#clojurehttps://t.co/7sn8XPc7Ga
Use with babashka:
https://github.com/babashka/http-server#babashkahttps://t.co/QUkaOhidlI
Enjoy!#2022-06-2411:16borkdudeThanks to @U0522TWDA who made this https://gist.github.com/holyjak/36c6284c047ffb7573e8a34399de27d8 which was in turn based on https://github.com/babashka/babashka/blob/master/examples/image-viewer.clj babashka example. I used several variations of this in my own projects, which eventually became this repo.#2022-06-2411:16mkvlrA very nice, I was longing for this, glad you beat me to it!#2022-06-2411:17borkdudeIt was already sitting there for half a year, I just had to add some docs to it :)#2022-06-2411:36Jakub Holý (HolyJak)awesome! thank you!#2022-06-2412:17Tomas BrejlaI never really got into clj tools, but
$ clj -Ttools install io.github.babashka/http-server '{:git/tag "v0.1.3"}' :as serve
$ clj -Tserve exec
is it a good idea to use such an generic "alias" as serve when using the :as alias? If I understand it correctly, it's considered to become a tool name, so I'd expect something like bb-http-server or similar. And use it as clj -Tbb-http-server serve (instead of exec)..#2022-06-2412:19Tomas BrejlaI mean upgrade attempt such as
clj -Ttools install-latest :tool serve
feels strange
clj -Ttools install-latest :tool bb-http-server
feels more reasonable to me.#2022-06-2412:21borkdude@U01LFP3LA6P The alias is up to the user#2022-06-2412:35robert-stuttafordfyi @ULE3UT8Q5#2022-06-2413:23Ben SlessSyntax error compiling at (babashka/cli.cljc:23:22).
Unable to resolve symbol: parse-double in this context
😞#2022-06-2413:24Ben SlessShould at least specify it requires 1.11#2022-06-2413:25borkdudeWill fix that#2022-06-2413:27borkdudeTry 0.1.4 now#2022-06-2413:28borkdudeIt's funny because org.babashka/cli already depends on clojure 1.11, I would assume the clojure CLI to pull in at least that version.#2022-06-2413:28borkdude@UK0810AQ2 How were you "installing" it, as a clj tool, or so?#2022-06-2414:50Ben SlessAs a tool#2022-06-2414:52borkdude@UK0810AQ2 Can you try again using 0.1.4? If it persists, then I really don't know. Maybe the clojure version of your deps.edn is prioritized or you should update your clojure CLI? @U064X3EF3: halp... my clj tool depends on clojure 1.11, but somehow for Ben that's not working#2022-06-2414:54Alex Miller (Clojure team)if Clojure version is not not specified, you'll get the version from the root deps.edn in the Clojure CLI install, which matches the first part of the CLI version#2022-06-2414:55Alex Miller (Clojure team)what was you command Ben when you got that syntax error?#2022-06-2414:58borkdude@U064X3EF3 The tool does specify clojure version 1.11
https://github.com/babashka/http-server/blob/main/deps.edn#L1
and also one of its dependencies already did
https://github.com/babashka/cli/blob/b6e0156ec79a4db2403673fd8aaa22278e012ea4/deps.edn#L1#2022-06-2414:59borkdudeI can also see 1.11 pop up here:
$ clj -Spath -Tserve
#2022-06-2415:01Alex Miller (Clojure team)well, I repeat my request for knowing the actual command that caused the error (and the CLI version there)#2022-06-2415:07Ben SlessI had a version set in my global deps edn and by bumping it was able to use 0.1.3#2022-06-2415:10Alex Miller (Clojure team)why do you have that at all?#2022-06-2415:16borkdudeOh, actually I have that too:
:deps {
org.clojure/clojure {:mvn/version "1.11.0"}
}
and I'm noticing that this 1.11.0 ends up on my classpath instead of 1.11.1.
I had it because I wanted to use 1.11 by default and the clojure CLI didn't have that yet#2022-06-2415:39borkdudeShouldn't dependencies of tools or in local deps.edn override what's in your global home deps.edn though?#2022-06-2416:13Alex Miller (Clojure team)No, top level (merged) overrides#2022-06-2416:17borkdudeaha#2022-06-2416:18borkdudebut if you have
{:deps {foo/bar v1}
:aliases {:foo {:extra-deps {foo/bar v2}}}
then clj -A:foo pulls in v2 and not v1 right?#2022-06-2416:26Alex Miller (Clojure team)These are two different parts of the process#2022-06-2416:28borkdudebut isn't -T treated as some kind of alias, conceptually?#2022-06-2416:28Alex Miller (Clojure team)Step 1 is to merge the deps.edn#2022-06-2416:30Alex Miller (Clojure team)Yes, -T is kind of treated as an an alias, but again, that's part of a later step#2022-06-2416:34borkdudeI still don't see why a -T clojure version wouldn't override the global home clojure version then#2022-06-2416:36Alex Miller (Clojure team)I'm going to take this to a thread in #tools-deps so we're not spamming here#2022-06-2606:57borkdude@UK0810AQ2 note that a global clj dep in user deps.edn is going to override the clj version for all projects#2022-06-2606:58borkdudeSee conv in other channel, just wanted to share the summary here#2022-06-2800:35DerekAnnouncing org.passen/malapropism. A small library for configuration data backed by malli
https://github.com/dpassen/malapropism#2022-06-2821:48Luke JohnsonSuch a great name for this library!#2022-06-2806:43henryw374tiado-cljs2 , a new library that provides portable Shadow-cljs configurations (watches, release build etc) with Kaocha-cljs2 testing: https://github.com/henryw374/tiado-cljs2#2022-06-2811:20seriogaClojure adapter to jmustache library https://github.com/strojure/jmustache#2022-06-2813:55nottmeyHi, thanks for publishing your adapter. I’m just curious, whats the difference to https://github.com/fhd/clostache?#2022-06-2817:33seriogaHi @U3ZG4CAF8
Java implementations offer better performance than clostache https://github.com/serioga/clojure-benhcmarks/blob/master/src/clojure_benchmarks/mustache.clj.
The https://github.com/spullara/mustache.java is fast and has adapter but behaves buggy in my use cases.
Probably there are some feature differences between clostache and jmustache but I don't care.
At the moment I'm not totally satisfied with mustache language and think about alternatives.#2022-06-2818:08nottmeyI see, thank you. And enjoy the nice weather in hamburg 😄#2022-06-2819:24Alex Miller (Clojure team)https://github.com/clojure/tools.build {:git/tag "v0.8.3" :git/sha "0d20256"} is now available
• uber - https://clojure.atlassian.net/browse/TBUILD-32 - Preserve reader conditionals when merging data_readers.cljc
• uber - https://clojure.atlassian.net/browse/TBUILD-33 - Adjust regex for data_readers to omit .cljs
• Update to tools.deps.alpha 0.14.1212
#2022-06-2821:12seancorfieldhttps://github.com/seancorfield/build-clj io.github.seancorfield/build-clj {:git/tag "v0.8.3" :git/sha "7ac1f8d"} is available
• Fixes handling of :exclusions in monorepo "lifted" basis calculation
• Updates tools.build to v0.8.3
(follow-up in #tools-build)#2022-06-2913:27blueberryClojureCUDA 0.15.1 released. This release brings back compatibility with older Linux distros (such as ubuntu 20 etc.)
https://clojurecuda.uncomplicate.org/#2022-06-2913:28blueberryNeanderthal 0.44.1 released. This release brings back compatibility with older Linux distros (such as ubuntu 20 etc.)
https://neanderthal.uncomplicate.org/#2022-06-2913:48jpmonettasFlowStorm debugger 2.2.99 is out with new features
FlowStorm is a Clojure and ClojureScript debugger.
Last release (2.2.99) includes a bunch of new features, and fixes :
• Browser now support instrumentation/uninstrumentation of vars and namespaces (single and multiple)
• Instrumenting from the repl synchronize with the browser (for everything but #trace)
• Added a context menu on locals to define vars from values
• Added jump to first and last traces on thread controls (useful for exceptions debugging)
• Added print-level and print-meta controls on pprint value panels
• Improve re-run flow UX
• Namespace instrumentation now accepts :verbose? to log known and unknown instrumentation errors details
• Added flow-storm.api/uninstrument-forms-for-namespaces to undo instrument-form-for-namespaces instrumentation
• Added #rtrace0 ... #rtrace5, like #rtrace but with different flow-ids
• Added double clicking on flows functions window to execute show-function-calls
If you have any questions or ideas, there is the #flow-storm slack channel now!
Github repo : https://github.com/jpmonettas/flow-storm-debugger/
Cheers!#2022-06-2915:00Darrick WiebeThis is such an incredibly useful tool already.#2022-06-2915:48jpmonettasThanks @U01D37REZHP!#2022-06-2914:56blueberryDeep Diamond 0.23.1 released.
https://github.com/uncomplicate/deep-diamond#2022-06-3008:02Ivar Refsdalhttps://github.com/ivarref/yoltq, an opinionated Datomic queue for building (more) reliable systems, is out with new features:
• Added support for https://github.com/ivarref/yoltq#2022-06-22-v0256-diff. This requires that the function metadata contains the queue name. This makes it easier to jump directly from the producer to the consumer code.
• Added support for https://github.com/ivarref/yoltq#retrying-jobs-in-the-repl.
• Added unhealthy? function that returns true if there are queues in error. For the first 10 minutes it will return false so that if you include this in your application's health check, you can push new code and not have old failures stop your deploy. Yes, I was hit by this. ¯\(ツ)/¯
• Safer EDN reading and writing.
Limitations and alternatives have also been documented.
Yoltq supports retries, backoff, ordering and more. On-prem only. https://github.com/ivarref/yoltq#change-log.#2022-06-3014:42athoshttps://github.com/athos/trenchman 0.4.0 is out! Trenchman is a standalone nREPL/prepl client written in Go and heavily inspired by Grenchman.
• Added support for the nrepl+unix scheme to allow connections via UNIX domain sockets (which is a new feature that nREPL 0.9 introduced)
• Added a new option --debug to print messages sent between the client and server#2022-07-0107:08littleliCan I add it to scoop? #scoop#2022-06-3021:24Alex Miller (Clojure team)Clojure 1.12.0-alpha1 is now available https://clojure.org/news/2022/06/30/clojure1-12-alpha1#2022-06-3021:28Alex Miller (Clojure team)This release includes some changes to var interning as per the post. While we have thought of and tried many scenarios, it is hard to tell if we found them all. We really would appreciate you giving this a try early while you're developing and reloading etc to see if you encounter anything unexpected and drop us a question at https://ask.clojure.org if so.#2022-06-3022:12seancorfieldUpdating deps.edn at work to test it... 🙂#2022-06-3022:19eggsyntaxExciting!#2022-06-3022:22eggsyntaxAlex, would you say that this reflects a desire from the core team to shift toward smaller and more frequent new versions, or is that just how it happened to turn out this time?#2022-06-3022:27Alex Miller (Clojure team)We always desire smaller and more frequent versions, we’re just sometimes better at succeeding :)#2022-06-3022:45imreDoes CLJ-1872 mean (seq coll) is not going to be an idiom for (not (empty? coll)) going forward?#2022-06-3022:48seancorfield@U08BJGV6E The empty? docstring has been updated: "To check the emptiness of a seq, please use the idiom (seq x) rather than (not (empty? x))"#2022-07-0107:08borkdudeDoes this mean that clj-kondo should not warn on (not (empty? ...)) anymore unless it knows 100% sure the argument is a seq already?#2022-07-0108:28imreIt does sound like to me that going forward, (not (empty? coll)) should generally be preferred in cases where you don’t want to make any assumptions wrt what coll is#2022-07-0108:30borkdudeMaybe I'll just remove the linter then or disable it by default.#2022-07-0108:33imreDo note that I’m not on the core team (yet 😄) so I’m by no means a good source of information, I’m just speculating#2022-07-0108:49Eugenfeels like Christmas in July 🙂#2022-07-0111:57Alex Miller (Clojure team)Well this is an alpha1, so I wouldn't go run around changing anything yet#2022-07-0112:04Alex Miller (Clojure team)I think I'd flip that advice around and say that when you DO know you have something counted like a persistent coll, it is better to build a conditional on empty? than seq (esp if you are not doing anything else with seqs). If you are in a seq context, then keep using seq.#2022-07-0112:07Alex Miller (Clojure team)Generally I arrange the branches of the condition to not use not in either case if possible#2022-07-0112:42imreSo do I. I just find that there is a bit of an imbalance introduced here, with idiomatic (empty? x) being extended onto non-seq xes, but the so-far-idiomatic nonempty? check (seq x) isn’t. empty? is now generic across seqs and counteds but there isn’t a similarly generic counterpart I feel.#2022-07-0112:46borkdudeMaybe Clojure can have a (not-empty? ...) predicate which does the right thing for the right type.#2022-07-0112:46imreBackwards-compatibility isn’t affected as far as I can tell, but it might be surprising in new code that relies on empty? supporting counted colls that aren’t seqable#2022-07-0112:46Alex Miller (Clojure team)Well there’s not-empty #2022-07-0112:46borkdudeAnd then this debate can be over :)#2022-07-0112:46borkdudetrue#2022-07-0112:47Alex Miller (Clojure team)Maybe not-empty should be based on empty? #2022-07-0112:49Alex Miller (Clojure team)I think the difference is seqs have nil punning, other colls don't#2022-07-0112:49Alex Miller (Clojure team)So it's not symmetric#2022-07-0112:51imre#2022-07-0112:53Alex Miller (Clojure team)symmetry of what?#2022-07-0112:53Alex Miller (Clojure team)vote on what?#2022-07-0112:53Alex Miller (Clojure team)not sure what you're even advocating#2022-07-0112:53imreApologies Alex, I misread your reply. Allow me to clarify#2022-07-0113:00imreI think basing non-empty on empty? is a step in the right way. Note that it would still result in double negations in the seqable branch. Implementing a notempty? or not-empty? similarly to the new implementation of empty? could save that.
Really what I’m looking for is the ‘one idiomatic way’ of checking both. Pre-1.12 that would be empty?/`seq`, from 1.12 it could be empty?/`x` where x is one specific function/macro and not a conditional expression.#2022-07-0409:14henrik(defn populated?
[coll]
(boolean (not-empty coll)))
If not-empty works as intended, you could just coerce it to a boolean, right?#2022-07-0409:15henrikI tried hard to come up with a word that didn't include not in the name. The internet suggests populated, occupied, and cherished 🙂#2022-07-0409:23borkdudeI think I prefer not-empty? ;)#2022-07-0409:35henrikCome on, what's wrong with cherished?#2022-07-0410:39henrikI'm disappointed in the English language here. We have "nothing", "something", and "everything", mapping to "empty", <go fish>, and "full".#2022-07-0410:44borkdudeWell, we have *, ? and + in regexes to denote 0 or more, 0 or 1 or 1 or more. So why not use: (+? coll) , that seems like an excellent choice to me... 😁#2022-07-0109:17tgkhttps://github.com/tgk/plait 0.0.1 is out. It is a wrapper around let which allows you to redeclare previous bindings and for those new declarations trickle through to the rest of your plait bindings. It is designed to making the declaration of repetitive test setup-code easier to write, read, and maintain - think rspec from Ruby but with less magic. We have used it at GoMore for a while now in our test code and are very happy with how it has allowed us to keep the test code shorter and easier to read.#2022-07-0109:48Geoffrey GaillardThis is an interesting idea. IIUC current implementation implies bindings are evaluated once per plait instance, right? Like:
(plait [a (do (prn "a evaluated") 1)
b (inc a)]
(plait [b (+ 2 a)])) ;; 3
;; Prints
;; "a evaluated"
;; "a evaluated"#2022-07-0110:07tgkThis is correct! We haven't had the use case yet but you could even use it to trigger an extra evaluation by passing the empty vector (plait [] ...)#2022-07-0110:07tgkSo the strategy is very naive to avoid any surprises.#2022-07-0110:10chopmoAnother thing worth mentioning is that all bindings need to be declared at the top level. This to make the ordering explicit.#2022-07-0110:20Geoffrey GaillardDo you have the opposite use case? Eval bindings the minimum amount of times. Like statically tracking symbol usage to prune unused bindings and avoid binding repetition when an ancestor is shared:
(plait [a (do (prn "a evaluated") 1) ; a has 2 children
b (prn "b shadowed " (inc a)) ; b is shadowed, no need to run (inc a)
]
(plait [b (+ 2 a)]
(prn "b " b) ; b must be evaluated here, so a must be too
)
(plait [b (+ 3 a)]
(prn "b " b) ; b must be evaluated here, a is already evaluated
))
;; Prints
;; "a evaluated"
;; "b 3"
;; "b 4"
;; (do (prn "a evaluated" 1)
;; -----------------------
;; |
;; a
;; |\
;; / \_
;; / \
;; (+ 2 a) (+ 3 a)
;; ------ ------
;; | |
;; b b
;; | \
;; | |
;; (prn "b " b) (prn "b " b)#2022-07-0110:45tgkAh no! That would be more in line with rspec from Ruby where a traversal of the directed acyclical graph means only the minimum code is called. We also experimented with this approach but were unable to get satisfactory let-style bindings without re-implementing let and therefore abandoned the approach. But it would be interesting to see! We experimented with prismatics fnk for that approach.#2022-07-0111:15borkdudeA #malli + #babashka co-announcement by @ikitommiand me 🎉
metosin/malli {:mvn/version "0.8.9"} - and #babashka 0.8.157 are now compatible.
Both projects have had a new version released today to celebrate.
This is how you can use malli in a babashka script:
(ns bb-malli
(:require [babashka.deps :as deps]))
(deps/add-deps '{:deps {metosin/malli {:mvn/version "0.8.9"}}})
(require '[malli.core :as malli])
(prn (malli/validate [:map [:a [:int]]] {:a 1}))
More info here:
https://github.com/metosin/malli#babashka#2022-07-0111:18Adam HelinsThat's excellent news, congrats!#2022-07-0111:35ikitommiThanks @U04V15CAJ! Looking forward to seeing dev-tools/scripts built on top of this: schema inferrers, coercers, pretty printers etc.#2022-07-0112:06russmatneyVery excited about this! gratitude Thank you for the work and effort bringing these together!#2022-07-0115:16robert-stuttafordbrilliant!#2022-07-0117:47ClojaskUp until now, there is not any mutable heap (priority queue) data structure implemented using pure Clojure. We’re therefore excited to announce the release of https://github.com/clojure-finance/clojure-heap. We implemented every necessary API of a priority queue, including add, poll, peek, etc. Transient variables are used to boost the speed of clojure-heap. Unlike https://github.com/clojure/data.priority-map/ or java/priority-queue, you can store basically any Clojure type to clojure-heap without sacrificing much performance.#2022-07-0117:53Noah BogartNot released on clojars, but copy-paste a file into one's project?#2022-07-0117:53Noah BogartOtherwise, looks cool!#2022-07-0118:38hiredmanit doesn't really, it is using the transient as a mutable collection, bashing on it in place, which the docs specifically say not to do, and will not work on larger collections (transient operations may existing or return new values)#2022-07-0119:10Alex Miller (Clojure team)yeah, that's broken#2022-07-0203:21Clojask@hiredman Thank you for pointing this out. Actually in the pre-release, we did utilize the return value of the transient. However then in the optimization, we found that the return value and the input are the same, so we ignored all the return values. Sorry that we did not find this action is against the transient norms. We have reverted the version back to the “return value” one.#2022-07-0215:03emccue@U03JDCVV1MX I can set aside some time if you need help publishing to clojars or maven central. You would probably want to select unique coordinates other than clojure.heap and java.core for the namespaces. Also porting to deps.edn would allow you to have it available as a git dep#2022-07-0303:03Clojask@U3JH98J4R @UEENNMX0T Thank you for the kind suggestions. The project is on Clojars.#2022-07-0514:50avi> Also porting to deps.edn would allow you to have it available as a git dep
FYI, libs like this can be used as a gitlib by overriding tools.deps manifest detection, like so:
com.github.gnarroway/hato {:git/tag "v0.8.2" :git/sha "e75c194" :deps/manifest :deps}
…explicitly specifying :deps/manifest as :deps triggers tools.deps to consider the lib a tools.deps lib. And it doesn’t mind that deps.edn doesn’t actually exist.
Of course, if the lib has any dependencies, they’ll need to be also added to the project’s deps.edn and they won’t update automatically if you change versions (tags) so this works best for libs that have no deps or only a few deps.#2022-07-1114:08MattMany thanks for the suggestions, much appreciated. We're looking into it.#2022-07-0121:22uochanJust released antq ver 1.8.847 Tool to point out your outdated dependencies.
https://github.com/liquidz/antq
Added progress bar to table reporter, and applied timeouts to some external operations.#2022-07-0203:21Clojask@hiredman Thank you for pointing this out. Actually in the pre-release, we did utilize the return value of the transient. However then in the optimization, we found that the return value and the input are the same, so we ignored all the return values. Sorry that we did not find this action is against the transient norms. We have reverted the version back to the “return value” one.#2022-07-0307:32simongrayNew release of https://github.com/simongray/datalinguist (0.2.171), the Clojure wrapper for Stanford CoreNLP. This release...
• bumps the CoreNLP dependencies to 4.4.0 (the latest)
• adds support for Tregex (grammatical constituency tree pattern matching)
• adds support for TokensRegex (token-based pattern matching)
• removes the ML contribution by Carsten Behring at his own request#2022-07-0408:22peterhGreat work, thanks for doing this!
Having had no previous experience with NLP libraries, I was wondering why I couldn’t get your examples to work. Then I realized that I had to download CoreNLP first from https://stanfordnlp.github.io/CoreNLP/ and add stanford-corenlp-4.4.0/* to the classpath. Everything worked fine after that.
Is this what you are supposed to do? It wasn’t mentioned in the readme, so I was wondering if I did something wrong here or if it is more obvious to people who have already worked with CoreNLP.#2022-07-0408:26simongrayHm… CoreNLP should be already added to the classpath if you’re using this as a library. However, you do need to download a language model to get most of the examples to work. This is mentioned in the README: https://github.com/simongray/datalinguist#language-models#2022-07-0408:28simongrayPerhaps I should make an example project to make this a bit clearer.#2022-07-0408:34peterhThis is strange, then maybe something with my setup wasn’t right. I have a minimal deps.edn that looks like this:
{:paths ["stanford-corenlp-4.4.0/*"]
:deps {edu.stanford.nlp/stanford-corenlp$models-english {:mvn/version "4.4.0"}
dk.simongray/datalinguist {:mvn/version "0.2.171"}}}
So I also had the language model already in there, but I had to add the path to get it to work. In my source file, I required [dk.simongray.datalinguist :refer :all] and recreated the example in your readme.#2022-07-0408:35peterhYes, an example project could be very helpful I believe.#2022-07-0409:17simongrayHere you go: https://github.com/simongray/datalinguist-example
This works for me using the Clojure CLI in IntelliJ/Cursive.#2022-07-0409:33peterhThanks for the example! You used edu.stanford.nlp/stanford-corenlp$models instead of specifying the language model like I did before and it seems like this was the problem. I wasn’t aware that I also need the models library without any language suffix, but now it works fine.#2022-07-0409:37simongrayIt's also confusing to me 😁 basically, most annotators need some data to work and in the case of English this data is not in a single place. Part of the motivation of this library is to make CoreNLP more accessible, since using it from Java is even more confusing IMO and requires some significant boilerplate.#2022-07-0409:40simongrayIf I could, I would just include all of the official language models in datalinguist, but that constitutes a multi-gigabyte dependency.#2022-07-0409:53peterhYeah, I wouldn’t even know where to start when using the library from Java. Maybe a little note in the “Language models” section of your readme would clarify that you also need the package without the suffix? Otherwise I think it is really easy to setup.#2022-07-0410:14simongrayI need to do a bunch of stuff, including rewriting the README and the examples 🙂#2022-07-0318:56Ivar RefsdalNew release of https://github.com/ivarref/double-trouble (0.1.96), a library to handle re-tried Datomic transactions and similar situations. This release adds:
• A set-and-change function, :dt/sac, that cancels a transaction if a value does not change.
• A just-increment-it function, :dt/jii, that increments the value of an attribute.#2022-07-0407:55borkdudeBebo - run Clojure Scripts on deno
https://github.com/borkdude/bebo
Channel: #bebo#2022-07-0414:22yoheikExcited to make the first announcement of Phrag: GraphQL API auto-created from an RDBMS connection for instant, flexible and customizable CRUD operations. Practicality in mind & performance checked.
https://github.com/ykskb/phrag#2022-07-0414:54Ivandoes it come with (or is there any integration with) anything like a rules-engine to control data access? is there an auth component?#2022-07-0416:01yoheikPhrag itself does not include auth component, but it has a concept of https://github.com/ykskb/phrag/blob/main/docs/interceptor.md which allows injection of any additional logic per table and operation type. This https://github.com/ykskb/situated-sns-backend has access control implemented with identities from Firebase's ID token like https://github.com/ykskb/situated-sns-backend/blob/main/src/situated_sns/signal.clj#L67.#2022-07-1219:21Jakub Holý (HolyJak)Nice! Why is only Postgres (and sqlite) supported? The information_schema.query key_column_usage and constraint_column_usage tables are "standard" and should work on other RDBMS?
BTW it would be nice if https://github.com/ykskb/phrag/blob/main/docs/mechanism.md linked to the other solutions mentioned and perhaps elaborated a little more on the differences. Where the other solutions too complicated? Too limited?#2022-07-1309:21yoheikIt's just that I haven't developed a DB adapter for other DBs yet. (That schema usage is specific to Postgres.) I'll probably work on MySQL adapter next, but if you have a demand for any specific DB, plz feel free to raise an issue 🙂
Regarding the feature/design comparison, I agree. I'll look into creating a comparison table between other projects when I get a chance.#2022-07-0415:49respatializedhttps://www.fabricate.site/
Introducing `fabricate` - generate static websites with the full power of Clojure at your disposal, from your project's REPL. Employ your abilities as a programmer for creative expression and automating boring tasks like listing every var in a namespace. Break the boundary between your programming language and your markup. Works best in emacs (for now). Experimental, but extremely fun to use. Use with caution, or with reckless abandon.
Github repo: https://github.com/fabricate-site/fabricate
Feedback/comments/criticisms very much welcome and appreciated. Release on Clojars coming soon.#2022-07-0510:06vemvInteresting!
that "🔚" in a code snippet is confusing, i.e. is that syntax?#2022-07-1218:49Jakub Holý (HolyJak)Based on https://www.fabricate.site/tutorials/fabricate-for-docs.html
> They start with the ✳️ emoji and end with the 🔚 emoji.
the answer is yes#2022-07-1218:55Jakub Holý (HolyJak)For Extended form expressions, I wonder why not ✳( ...)🔚 instead, which I presume would make it easier to have an arbitrary level of nesting?#2022-07-0510:28Ashwin Bhaskarreleased a small utility tool that provides a simple interface to consume from Kafka - https://github.com/ashwinbhaskar/kafka-util#2022-07-0609:20Karol WójcikNew release of https://github.com/FieryCod/holy-lambda-ring-adapter featuring support for RestApi AWS Api Gateway integration.#2022-07-0615:13borkdudePod babashka buddy 0.2.0 - Use buddy from #babashka
https://github.com/babashka/pod-babashka-buddy/releases/tag/v0.2.0
https://github.com/babashka/pod-registry/blob/master/examples/buddy.clj is an example how you can use it.#2022-07-0615:39borkdudeAny many thanks to @U015Y1A1N8Y and @U06FS3DLH!#2022-07-0700:54nnicholsFor those using GitHub Actions, I've recently made some updates:
• nnichols/clojure-dependency-update-action https://github.com/nnichols/clojure-dependency-update-action. Pull requests generated by the action now link to a diff between the new and old versions.
• nnichols/clojure-lint-action https://github.com/nnichols/clojure-lint-action. This fixed an issue where the running version of clj-kondo could fall out of date and the passing of some optional flags to reviewdog#2022-07-0709:20mpenetnew https://github.com/exoscale/interceptor release - adding utility fns to remove interceptors from stack/queue at execution time and related utilities#2022-07-1219:50Jakub Holý (HolyJak)I think there are some typos here
> Sieparri also differs in a few way at the API level to accomodate the its usage goals
perhaps should be
> Sieparri also differs in a few way*s* at the API level to accom*m*odate the its usage goals
?#2022-07-0709:21mpenethttps://github.com/exoscale/coax bugfix release - preserve numeric types when coercing values via int? integer? etc#2022-07-0715:10Joshua SuskaloVersion 0.5.357 of coffi, the Clojure Foreign Function Interface backed by Project Panama is out, now with support for JDK 18!
https://github.com/IGJoshua/coffi#2022-07-0718:00borkdudeA new version of #nbb - Scripting in Clojure on Node.js using SCI
v0.6.122
Introducing a new https://github.com/babashka/nbb/tree/main/doc/bundle command which lets you package up your nbb project as a single standalone JS file.
An example https://github.com/borkdude/nbb-action-example written with nbb which benefits from the bundle command.#2022-07-0814:21wilkerlucioPathom 3 version 2022.07.08-alpha is out! This release includes fixes and optimisations, the planner got a new optimization that affects specially the usage of placeholder nodes, getting the graph simplified (check https://github.com/wilkerlucio/pathom3/issues/146 for details).
Changes:
• Fix: Exceptions that occur inside p.a.eql/process in JVM won't include the entire stacktrace anymore. (issue #142)
• Add ::p.error/error-data to datafied error object
• Optimize nested AND branches on planner
https://clojars.org/com.wsscode/pathom3#2022-07-0816:50Mark WardleThis looks like fantastic work @U066U8JQJ - looking forward to trying it out.
Your software is powering a large study in multiple sclerosis in the UK across multiple sites, in order to assess the efficacy of high risk drugs in aggressive disease. So thank you. #2022-07-1113:13bruno.bonacciJust released μ/log v0.9.0 https://github.com/BrunoBonacci/mulog
• It contains a few stability fixes for Elasticsearch data streams users, and more (thanks to @thomas559, @peder.refsnes)
• and most importantly, I have switched the JSON module to use Chris Nuernberger's Charred fantastic library which doesn't depend on Jackson and it should avoid the library clash issues with other JSON providers
For the full list of changes please see the CHANGELOG, if you have any questions feel free to write a message in the #mulog channel#2022-07-1114:00oliycarmine-streams 0.1.5 has just been released 🎉
• adds ability to remove consumers when they exceed a certain idle threshold #9
• bumps carmine dependency
carmine-streams is a library that sits on top of carmine to provide a nicer api for working with redis streams
https://github.com/oliyh/carmine-streams#2022-07-1206:42mariaWe've opened applications yesterday for our next funding round https://www.clojuriststogether.org/open-source/ 🎉 Applications are open for two weeks until July 25th. If you have any question, stop by in #cljtogether.#2022-07-1318:19jpmonettasFlowStorm debugger 2.2.114 is out, with a User Guide
FlowStorm is a Clojure and ClojureScript debugger.
Check out the new User Guide https://jpmonettas.github.io/flow-storm-debugger/user_guide.html
Github repo : https://github.com/jpmonettas/flow-storm-debugger/
Cheers!#2022-07-1620:44Jakub Holý (HolyJak)Amazing work, thank you! Flow Storm has saved my day already couple of times 🙂#2022-07-1320:20blueberryClojure Sound 0.3.0 released!
https://github.com/uncomplicate/clojure-sound#2022-07-1320:36imrehttps://github.com/imrekoszo/polylith-kaocha, the Kaocha-based test runner for Polylith got its https://github.com/imrekoszo/polylith-kaocha/releases/tag/v0.8.1 released:
This release contains an important fix so clojure -M:poly test now properly returns a non-zero exit code when there are test failures.
Details: https://github.com/imrekoszo/polylith-kaocha/releases/tag/v0.8.1#2022-07-1408:21Matthew Davidson (kingmob)Aleph 0.5.0 is now available. It includes many bugfixes, and some speed improvements. Please give it a try! https://clojars.org/aleph/versions/0.5.0
Many thanks to our contributors: Arnaud Geiser, Moritz Heidkamp, Erik Assum, Ivar Refsdal, and Matthew Davidson (me)
Changes:
• Add initial clj-kondo hooks
• Minor bugfix in examples code
• Add pipeline-transform test
• Add missing type hint in websocket-server-handler
• Correctly handle too large headers/URIs
• Add doc for undocumented response-executor parameter
• Minor bugfix for keep-alive? false
• Fixed major memory leak when sending InputStreams
• Fixed bug when sending empty files
• Fix returned filename in multipart uploads for clj-http parity
• Ensure client exceptions handled and channel closed on invalid input
• Fix minor bug with redirects and :method key
• Fix bug in idle state timeouts
• Disable misleading logs during tests
• Switch to Netty’s FastThreadLocalThread for threads
• Ensure wrap-future callbacks have thread bindings and a full classloader chain
• Fix minor reflection warning in HttpContentCompressor ctor
• Add missing direct dependency on Dirigiste#2022-07-1509:12bozhidarinf-clojure 3.2.0 is out with a few small improvements https://github.com/clojure-emacs/inf-clojure/releases/tag/v3.2.0 That's the first release in almost a year, so enjoy! Thanks to all contributors, sponsors and especially to Clojurists Together for their continued support of my Clojure OSS work! lambdalove#2022-07-1511:06borkdudeOpen sourced the code for my blog as a library. Announcing quickblog!
Light-weight static blog engine for Clojure and babashka
https://github.com/borkdude/quickblog
See a demo of the live-reload feature https://twitter.com/borkdude/status/1547912740156583936#2022-07-1511:47DumchNew https://github.com/Liverm0r/DartClojure translator release https://github.com/Liverm0r/DartClojure/releases/tag/0.2.11
Compared to previous announced version:
— Moved to dotted symbols for named parameters;
— Fix bug with commas at the last map argument;
— Fix await bug;
— Fix bug with not being able to translate when 'return' is the first keyword;#2022-07-1811:17borkdudeClerk, Local-First Notebooks for Clojure, version 0.9.513 is out!
New features:
• 🌟 Valuehash ⚛️: treat clojure.core/deref expressions separately in the dependency graph and attempt to compute a hash at runtime based on the value of the expression. This lets Clerk see an updated value for these expressions without needing to opt out of Clerk's caching using ^:nextjournal.clerk/no-cache (#187).
• ⭐️ Expand indicators & allow option-click to expand all siblings. This adds an affordance to make it obvious that collections can be expanded. In addition, we support Option-Click to expand all sibling nodes on a level.
• ⭐️ Add nextjournal.clerk/eval-cljs-str that can be used to provide viewer :render-fns from other sources. Defining them in a separate .cljs file makes linting work on them.
• 💫 Add docstrings for Clerk's public API in nextjournal.clerk.
https://github.com/nextjournal/clerk/blob/main/CHANGELOG.md#09513-2022-07-18
Channel: #clerk
On behalf of #nextjournal, enjoy!#2022-07-1813:28MarkoHi everyone,
I wrote a blog post explaining the usage of the new :kit/htmx module that can be used to get started with the development of the https://htmx.org/ based applications with https://kit-clj.github.io/.
You can check it out here: https://marko.euptera.com/posts/htmx-kit.html
Cheers,
Marko#2022-07-1814:56borkdude@U02T2S42SMD Congrats! #news-and-articles might be a better place for these sorts of posts :)#2022-07-1815:31Marko@U04V15CAJ you're right. I noticed that I posted to the wrong channel only after damage has already been done. Will be more careful in the future.#2022-07-1919:01bozhidarclojure-mode 5.15 is out https://github.com/clojure-emacs/clojure-mode/releases/tag/v5.15.0 Enjoy!#2022-07-1920:37Eugenhello everyone,
@yogthos was kind enough to accept my contributions to 'migrate' https://github.com/yogthos/migratus to https://github.com/seancorfield/next-jdbc .
Version 1.3.8 brings:
• deps.edn file for git dependencies
• next.jdbc migration - should be transparent for users
• Fix documentation for passing Connection and DataSource
• kaocha test runner support
See changelog https://github.com/yogthos/migratus/blob/master/CHANGES.md . https://clojars.org/migratus/versions/1.3.8#2022-07-1922:22Eugenwe found an issue with the release - it does not work with DataSource / Connection yet.
Passing a db-spec works fine.
We'll work to fix this issue and make another release.#2022-07-2000:06vemvEither way, this is great news - kudos!#2022-07-2009:25oliyHi all, I'm pleased to announce the 0.2.0 release of re-graph
re-graph is a GraphQL client for Clojure and ClojureScript with bindings for re-frame applications.
https://github.com/oliyh/re-graph
This is a major release of re-graph due to the API signatures changing.
You are strongly advised to read the https://github.com/oliyh/re-graph/blob/master/UPGRADE.md guide for rationale and code examples.
This release changes:
• Nearly all API signatures, rationalising multiple positional args into a single map. The legacy API is retained, for the time being, at re-graph.core-deprecated https://github.com/oliyh/re-graph/issues/81
This release improves:
• Documentation of options for authentication https://github.com/oliyh/re-graph/issues/80
• Error messages when re-frame is not initialised properly https://github.com/oliyh/re-graph/issues/86
#2022-07-2104:00Yehonathan SharvitThe final version of Data-Oriented Programming is out!
https://clojurians.slack.com/archives/CD9UFQS93/p1658375836842569#2022-07-2105:26robert-stuttafordthis is a fantastic, seminal piece of work, @U0L91U7A8 . well done and thank you!#2022-07-2108:46littleliI've bought your book the other week unsure because it was in MEAP, but this is great news! Hungry to read it out during the evenings. 🍪 time!#2022-07-2114:19Yehonathan SharvitThank you @U0509NKGK!#2022-07-2115:02Daniel JompheCongrats! Quite curious about this book. Is there a writeup somewhere answering the question: how useful is this book to Clojure developers?
Here we're all in the few months/years of experience with Clojure, coming from typical engineering backgrounds with e.g. Java / C#. Might we learn a lot from this book or should Clojure already have sufficiently nudged us towards these 4 principles by default?#2022-07-2115:54Yehonathan Sharvit@U0514DPR7 That’s a great question that I have been asking myself since I have published the first version of the book (with just a few chapters). I think you should ask on #data-oriented-programming#2022-07-2116:00Yehonathan Sharvit@U0514DPR7 By coincidence, someone gave an answer to this question on Twitter an hour ago (more or less at the same time you asked the question here)
https://twitter.com/agile_geek/status/1550131632115294214?s=20&t=3Xl59LmsWIevVF8-c5NlLQ#2022-07-2119:29Daniel JompheThanks a lot Yehonathan! I still asked the question, as you suggested, in #data-oriented-programming. For anyone interested in how people will answer it:
https://clojurians.slack.com/archives/C01M07CTYRY/p1658431698639939#2022-07-2109:18jmayaalvAnnouncing Graffito: An idiomatic way to expose your Pathom 3 Graph as a Graphql Interface.
• Expose your https://github.com/wilkerlucio/pathom3 graph to Clojurescript (using eql) or Javascript using Graphql
• Uses https://github.com/walmartlabs/lacinia as Graphql engine backed by Pathom .
• Support for: Graphql Queries and Mutations.
• Sane conventions that reduce the boilerplate needed.
• Todos: Subscriptions, Better Docs, Support for Graphql fragments, aliases and variables.
https://github.com/jmayaalv/graffito/
Hoping that an announcement will bring more Pathom enthusiasts and help to Pathom reach to more developers.#2022-07-2121:07borkdudeBabashka CLI: turn Clojure functions into CLIs!
v0.1.2 - v0.3.32 were released in the last (almost) two months with a large number of improvements.
Special thanks to @cap10morgan for his contributions.
Repo: https://github.com/babashka/cli
API: https://github.com/babashka/cli/blob/main/API.md
Changelog: https://github.com/babashka/cli/blob/main/CHANGELOG.md#2022-07-2122:08cap10morganThis is a great library that I had been writing in my head for awhile. But @U04V15CAJ beat me to coding it and (of course) did it better!#2022-07-2208:04bozhidar@alexyakushev just released clj-async-profiler 1.0! Read more about it here - http://clojure-goes-fast.com/blog/clj-async-profiler-100/#2022-07-2209:24Lukas Domagalayou have a broken link in the “A regex-based Replace…” paragraph to http://clojure-goes-fast.com/img/posts/html-flamegraph1.html#2022-07-2209:55vlaaadVery very very very very good!#2022-07-2215:11Lennart Buitclj-async-profiler is such a great tool!#2022-07-2223:12ericdalloc/c @U07M2C8TT#2022-07-2301:16jacob.maineThanks @UKFSJSM38 And especially thanks to @alexyakushev! 🙏 I love the :predefined-transforms. I think we’ll be able to use them in clojure-lsp’s profiling tools to collapse the time spent in rewrite-clj and clj-kondo—both of which contribute to most clojure-lsp flamegraphs, but which we can’t easily optimize from within clojure-lsp itself. Good stuff!#2022-07-2222:59uochanJust released merr ver 0.4.169, Minimal and good enough error handling library for Clojure(Script).
https://github.com/liquidz/merr
Added support for Babashka and nbb :)#2022-07-2409:37Ben SlessAnnouncing first releases for:
io.github.bsless/tools.jvm {:mvn/version "0.0.15"} - small utilities for inspecting the current JVM process; Which args did I launch with? What's my PID? What are the current JVM's properties?
Additionally, has a function for launching VisualVM and attaching it to the current process
repository: https://github.com/bsless/tools.jvm
API: https://github.com/bsless/tools.jvm/blob/master/API.md
io.github.bsless/tools.jcmd.jfr {:mvn/version "0.0.3"} - Capture JFR recordings for the current JVM process or invoke as a tool
repository: https://github.com/bsless/tools.jcmd.jfr
API: https://github.com/bsless/tools.jcmd.jfr/blob/master/API.md#2022-07-2410:21p-himikHeh, a funny coincidence in naming with https://github.com/henryw374/tools.jvm#2022-07-2411:04Ben SlessI knew it existed, but the naming is too correct to pass.
We use qualified naming anyway, so I hope Henry will forgive me#2022-07-2411:06Ben Slessbsless/tools.jvm previously existed as introspector but I am terrible at naming things so opted for the least creative name I could 🙃#2022-07-2609:35jumarAn interesting utility, thanks!
I often have a need to get current pid in the REPL.
I tend to use (-> (java.lang.ProcessHandle/current) .pid) but that's only for Java 9+.
Does your lib require anything above Java 8?#2022-07-2609:40Ben SlessNot sure about visualvm, but everything else was tested on java 8 - 17 on windows, macos and linux#2022-07-2609:42jumarPerfect.
Btw. I noticed that pid returns a string while the method I shared above returns long, which is more accurate and convenient I think.
Possible to change that?#2022-07-2609:44Ben SlessPossible? Yes
Should? Not sure. I get it as a string to begin with:
(defn pid
"Get current JVM's PID as a string."
[]
(-> (runtime-bean)
.getName
(str/split #"@")
first))
#2022-07-2609:45Ben SlessI'd rather add another function that gets it as a Long#2022-07-2609:45Ben SlessAnd uses processhandle when possible#2022-07-2609:47jumarYeah, I know what your current implementation does right now.
Just saying that you could coerce it because PIDs are numbers and also the canonical implementation (ProcessHandle) returns a number in later JDKs.
But of course I have no problem if it stays the way it is 🙂#2022-07-2610:13Ben SlessI'll add another function, why not#2022-07-2410:49bortexzReleased a library for dependency graph computations, where computed values can be feeded into the next graph computation https://github.com/bortexz/graphcom#2022-07-2421:20ericdalloclojure-lsp Released https://clojure-lsp.io/ 2022.07.24-18.25.43 with focus on performance improvements!
🚀 There is a new experimental feature, which completely changes the way clojure-lsp analyze the project's code, not scanning the whole project after startup but only the current namespace and its dependencies, building and maintaining a dependency-graph, this feature should improve performance drastically, especially for huge projects with lots of files like metabase. For people interested, please help with tests and feedbacks enabling it via {:experimental {:dep-graph-queries true}} in your .lsp/config.edn. (Details about the performance improvement https://github.com/clojure-lsp/clojure-lsp/pull/1053#issue-1272865476.)
Besides that, we had many minor performance improvements and even new refactorings!
Kudos to @jacob.maine for the huge help during this release! 👏
Thank you for all sponsors and contributors! 💜
For more information, check #lsp#2022-07-2423:12Luke JohnsonThanks for all your continued updates! Your hard work makes my life so much easier! 🙂
That said, I think there’s a problem between the latest version of clojure-lsp and Calva on VS Code.
I started a https://clojurians.slack.com/archives/CBE668G4R/p1658703936033779#2022-07-2423:13Luke JohnsonOkay. This was already fixed by @UKFSJSM38! Thanks so much! Amazing work!#2022-07-2504:27Yehonathan SharvitThe print version of “Data-Oriented Programming” is out!
he book is available at https://manning.com.
Discount code: sharvit39#2022-07-2505:44IvanCongrats!#2022-07-2521:32mkvlrCongratulations @U0L91U7A8!#2022-07-2812:54Jason M JonesCongratulations, a really great book that has opened my mind to lot of new possibilities!#2022-07-2815:25Yehonathan SharvitWhat kind of possibilities @U0132EKGZFB?#2022-07-2815:42Jason M JonesThanks for asking @U0L91U7A8. Well, for one, the possibilities of changes without so much maintenance, and even the possibility to change some code at all (which becomes very challenging when you have objects and fields at multiple layers). I have been exploring Clojure, and was drawn by its simplicity and the philosophy of having a few data structures, and many functions to operate on those, instead of the inverse with objects. It occurred to me that since most of our data comes in, receives some transformation, is stored in another format, what is the point of having all these intermediate objects with all these fields, they are a huge burden. With Clojure, it is so much easier to work with the more generic data and transform it. Your book was a great bridge between Clojure, which I see as ideal for this, and the multitude of languages our software is written in, which will not be able to be ported to Clojure soon, if ever. Your book put much more definition to my intuitions, and much more defined concepts. , I can start slowly incorporating the ideas of Data Oriented Programming, and with new projects begin with it. So thank you for sharing all of this. I plan to share your book with my team members and other software engineers. I hope that the industry will see the value of your thoughts, and start to incorporate them more, I know I will be.#2022-07-2815:48Yehonathan SharvitWow! I’m so glad you enjoy the book both from an intellectual and a pragmatic perspective.#2022-07-2815:53Jason M JonesI certainly did!#2022-07-2521:24sudakatuxJust Released version 0.2.0 of the conductor-sdk.
Some interesting features of this version:
- 100% Written in Clojure. No mora java inter-op
- Compatible with GraalVM you can create workers that don't require the JVM
- Contains Utils to treat Conductor Tree structures as data map/filter workflow tasks.
Netflix Conductor is an open source workflow orchestration platform. Used by top companies to simplify microservice integrations, and connect your Clojure microservices together (even to services written in other languages). Learn more about Conductor https://orkes.io/what-is-conductor/
We have built the Clojure SDK to make it easy to integrate your Clojure microservices into Conductor, and create workflows and tasks as code.
Try Conductor at http://play.orkes.io
https://clojars.org/io.orkes/conductor-clojure#2022-07-2911:30borkdudeBabashka 0.9.160 is released. It now comes with #babashka-cli integration, described in this blog post:
https://blog.michielborkent.nl/babashka-tasks-meets-babashka-cli.html
Full changelog:
• https://github.com/babashka/babashka/issues/1324: -x to invoke a function with babashka CLI
• https://github.com/babashka/babashka/issues/1324: babashka.tasks/exec to invoke a function with babashka CLI in tasks
• SCI: don't eval metatada on defn body
• SCI issue 774: make interpreter stacktrace available to user
• babashka.process: improve tokenize
• Upgrade to GraalVM 22.2.0 (#1325)
Enjoy! babashka#2022-07-2915:41Michaël SalihiJuste released Inertia-clojure 0.2.5. Clojure Middleware adapter for https://inertiajs.com/ to build single-page apps, without building an API.
https://github.com/prestancedesign/inertia-clojure
Changelog:
• Feature
◦ Keep http status code from response (fixes https://github.com/prestancedesign/inertia-clojure/issues/4)
• Changed
◦ Switch to tools.build
◦ Upgrade to Clojure 1.11.1
◦ Upgrade to Ring 1.9.5
◦ Upgrade to Jsonista 0.3.6#2022-07-2923:35seancorfieldhttps://github.com/seancorfield/next-jdbc -- com.github.seancorfield/next.jdbc {:mvn/version "1.2.790"} -- A modern low-level Clojure wrapper for JDBC-based access to databases.
• Address https://github.com/seancorfield/next-jdbc/issues/207 by supporting "db-spec" hash maps containing :datasource or :connection-uri (this is otherwise undocumented and intended to aid migration from clojure.java.jdbc).
• Address https://github.com/seancorfield/next-jdbc/issues/199 by adding notes on UTC usage -- https://github.com/denismccarthykerry.
• Enhance insert-multi! to accept a sequence of hash maps and also to support batch execution, via PR https://github.com/seancorfield/next-jdbc/pull/206 -- https://github.com/rschmukler.
• Fix HikariCP pooling example.
Follow-up in #sql#2022-07-3002:42seancorfieldhttps://github.com/seancorfield/honeysql -- com.github.seancorfield/honeysql {:mvn/version "2.3.911"} -- Turn Clojure data structures into SQL.
• Address https://github.com/seancorfield/honeysql/issues/418 by documenting a potential "gotcha" with multi-column IN expressions (a change from HoneySQL 1.x).
• Fix https://github.com/seancorfield/honeysql/issues/416 via PR https://github.com/seancorfield/honeysql/issues/417 from https://github.com/corasaurus-hex -- using the internal default state for the integrity assertion.
• Address https://github.com/seancorfield/honeysql/issues/414 by providing an example of ORDER BY with a CASE expression.
• Address https://github.com/seancorfield/honeysql/issues/412 by documenting options in a separate page and reorganizing the ToC structure.
• Address https://github.com/seancorfield/honeysql/issues/409 by making docstring check for public helpers conditional.
• Fix https://github.com/seancorfield/honeysql/issues/406 by adding :alter-column (which produces MODIFY COLUMN when the MySQL dialect is selected) and deprecating :modify-column.
• Address https://github.com/seancorfield/honeysql/issues/401 by adding register-dialect! and get-dialect, and also making add-clause-before, strop, and upper-case public so that new dialects are easier to construct.
Follow-up in #honeysql#2022-07-3021:43johnPleased to announce the first release of net.clojars.john/inmesh {:mvn/version "0.1.0-alpha.1"} - "One step closer to threads on the web" - https://github.com/johnmn3/inmesh
It's a simplified rewrite of tau.alpha and introduces spawn, in and future to Clojurescript. It has a simple form of implicit binding conveyance as well as explicit binding conveyance.
For now, you have to declare some configuration details in an ns loaded by the screen/main thread. By the beta releases though, I'd like to provide some automation so that you only need to declare configurations for advanced scenarios. More details on configuration are in the repo.
spawn - provides a .thread-like facility for spawning webworkers, either ephemeral or long-lived. (can take a half-second of overhead, depending on loaded libs)
in - provides a way to invoke work on a spawned webworker. Multiple workers can be spawned and then you can nest ins so as to easily construct execution flows. (usually takes 4 or 5 milliseconds of overhead for small invocations in compile mode :none)
future - backed by a pool of webworkers, provides a way to invoke work off the current thread, without having to spawn or specify a worker (usually takes 8 to 10 milliseconds of overhead for small invocations in compile mode :none)
All three provide simple binding conveyance, derefability in workers, promise/thening in the screen thread and allowing for yielding in async scenarios.
Also comes with a wrapping for js/IndexedDB, providing a synchronous db-get call, similar to the synchronous API of js/localstorage.
Provides a standard https://johnmn3.github.io/inmesh/ built on re-frame/mui-v5/comp.el/sync-IndexedDB, with application logic (reg-subs & reg-event functions) moved into a webworker, where only react rendering is handled on the screen thread, allowing for buttery-smooth components backed by large data transformations in the workers.
Also provides an auto-transducifying, auto-parallelizing =>> macro, ala https://github.com/johnmn3/injest that fans work across a worker pool, roughly doubling the speed of large transformations in Chrome and Safari and tripling it in Firefox.
(defn flip [n]
(apply comp (take n (cycle [inc inc dec]))))
(=>> (range)
(map (flip 100))
(map (flip 100))
(map (flip 100))
(take 1000000)
(apply +))
Those maps will be combined into a single transducer and then 512 element chunks will be lazily consumed and fanned across a worker pool, sequenceing the chunks through the transducer and then recombining the results on the calling thread. Returns a promise in the main thread.
Caveats: work is serialized across threads. But, as shown with =>>, you can make up for that by smartly chunking your work across a threadpool for nontrivial work loads.
Issues and PRs are welcome. It's a pretty early alpha and the APIs are subject to change. Might provide a pmap before the beta. Happy hacking!#2022-08-0218:58metasoarousOMMFG; Fantastic work! I've been dreaming about this for ages. Well done!#2022-08-0219:44johnThank you sir! Looking forward to hydrating oz charts with various data transformations off main thread now!#2022-08-0221:37metasoarousStop reading my mind! 😉#2022-07-3111:13borkdude#babashka-neil v0.1.36 is out! Featuring @seancorfield’s deps-new behind the neil new command. Also added neil add nrepl for adding an nrepl alias.
An easy way to set up your Clojure project:
neil new --name foobar
cd foobar
neil add nrepl
clojure -M:nrepl
neil add test
clojure -M:test
neil add build
clojure -T:build uber
#2022-07-3111:13borkdudeThanks to @U0CLCL6T0 who added both new features#2022-07-3111:42teodorluWow, nice!
Does this incur JVM startup time?#2022-07-3111:43borkdudeDo you mean new ? Nope, it runs in bb :)#2022-07-3116:44djanusI’ve released version 0.3.1 of https://github.com/nathell/skyscraper, a framework for structurally scraping whole sites in Clojure. Get it from Clojars: {skyscraper/skyscraper {:mvn/version "0.3.1"}}
Changes in this release:
• Backwards-incompatible API changes:
◦ parse-fn is now expected to take three arguments, the third being the context. The aim of this change is to support cases where the HTML is known to be malformed and needs context-aware preprocessing before parsing. Built-in parse-fns have been updated to take the additional argument.
◦ Cache backends are now expected to implement java.io.Closeable in addition to CacheBackend. Built-in backends have been updated to include no-op close methods.
• Optimization: Skyscraper no longer generates indexes for columns marked with :skyscraper.db/key-columns when creating the DB from scratch. There is also a new option, :ignore-db-keys, to force this at all times.
• Skyscraper now retries downloads upon encountering a timeout.
• Bug fixes:
◦ Fixed dev/scrape misbehaving when redefining processors while scraping is suspended.
◦ Fixed scrape mishandling errors with :download-mode set to :sync.
◦ Fixed an off-by-one bug in handling :retries.
◦ Retry counts are now correctly reset on successful download.
The Closeable change is prompted by a new, experimental backend that stores cached pages zstd-compressed in RocksDB. It’s not yet available in Clojars (use deps.edn’s git deps facility), but you can preview it here: https://github.com/nathell/skyscraper-cache-rocksdb.
As always, happy scraping!#2022-07-3117:52Eugenmigratus 1.4.0 is out - as a tool to do data migrations for SQL databases and more, thanks @yogthos for the release:
• new feature: Run basic tests against PostgreSQL using testcontainers
• new feature: Circle CI matrix runner - run against multiple clojure and jdk versions
• new feature: Circle CI junit reports, run tests with kaocha
• bug fix: https://github.com/yogthos/migratus/issues/181
• enhancement: https://github.com/yogthos/migratus/issues/221
https://github.com/yogthos/migratus/blob/master/CHANGES.md#2022-07-3121:51Michaël Salihihttps://github.com/prestancedesign/usermanager-reitit-example - A little demo web app in Clojure, using Integrant, Ring, Reitit, Selmer (and a database).
• Now has build.clj and uses tools.build to build an uberjar#2022-08-0109:36olttwaPresenting https://github.com/nilenso/goose
• Features: Scheduling, Error Handling & Retries, API to manage Jobs
• Documentation: https://github.com/nilenso/goose/wiki
• Uses Redis as a Queue Broker, with RabbitMQ planned for 0.3
Goose Client
(ns my-app
(:require [goose.client :as c]))
(defn my-fn
[arg1 arg2]
(println "my-fn called with" arg1 arg2))
; Supply a fully-qualified function symbol for enqueuing.
; Args to perform-async are variadic.
(c/perform-async c/default-opts `my-fn "foo" :bar)
(c/perform-in-sec c/default-opts 300 `my-fn "foo" :bar)
Goose Worker
(ns my-worker
(:require [goose.worker :as w]))
; my-app namespace should be resolvable.
(let [worker (w/start w/default-opts)]
; ... listen for SIGINT or SIGTERM ...
(w/stop worker))
Reach out on #goose if you need any help!#2022-08-0113:55blueberryNew releases of Neanderthal (0.45.0), Deep Diamond (0.25.0), and ClojureCUDA (0.16.0) now support the latest CUDA 11.7 GPU computing platform.
Plase check out clojars, or https://neanderthal.uncomplicate.org/ https://clojurecuda.uncomplicate.org/ https://github.com/uncomplicate/deep-diamond#2022-08-0114:28imrehttps://github.com/cgrand/xforms/releases/tag/v0.19.3 is out with babashka support and several fixes#2022-08-0114:28borkdudewelcome to add to https://babashka.org/toolbox/ :)#2022-08-0114:31Noah Bogartlooks like you got write access to the library! nicely done#2022-08-0114:47imreWith great power comes great responsibility. I understand Chris has other priorities lately, and I’m thankful to him for inviting me to publish this. A true gent!#2022-08-0115:04rickmoynihanAwesome news; this is a great library#2022-08-0211:40imreThanks to Chris this is now out on clojars as well#2022-08-0116:37Alex Miller (Clojure team)Save the date: the next Clojure/conj will be Apr 27-28, 2023 in Durham, NC! CFP will probably be in Dec/Jan timeframe.#2022-08-0120:06Jakub Holý (HolyJak)I'm happy to announce the alpha release of https://github.com/holyjak/fulcro-rad-asami , a #fulcro Rapid Application Development plugin enabling the use of #asami as the storage database. Asami is a graph database for Clojure and ClojureScript that is used either in memory or persisted to a disk. There is a demo application using it here https://github.com/fulcrologic/fulcro-rad-demo#running-an-asami-based-server-alpha-quality#2022-08-0211:14borkdudeEarly announcement of cherry, a .cljs to .mjs (ES6 module) compiler.
https://github.com/borkdude/cherry 🍒
The overall goal is to have something that works together well with the JS frameworks du jour: do some of the work in JS, and do some of the work in CLJS without much friction. The compiler runs in JavaScript (currently Node.js, but browser would also be possible), is small and fast, and can be ran on a file-by-file basis: 1 CLJS namespace = 1 ES6 module. See the cherry https://github.com/borkdude/cherry#cherry-cherries for more details. This project is experimental and looking for feedback: it is not production ready. With your feedback and testing on non-critical projects, cherry could become something production ready sooner or later. There are isolated things to work on like figuring out how to get the cljs.core module compatible with ES6 treeshaking. Your input is welcome!
Channel: #cherry#2022-08-0211:23Cora (she/her)amazing :star-struck: #2022-08-0215:17richiardiandreaThis is very nice, I think I'll try it out against Cloudflare...`shadow-cljs` works well but cherry seems very cool 😄#2022-08-0215:19borkdude@U0C8489U6 let me know how that goes :)#2022-08-0215:21richiardiandreawill do!#2022-08-0217:13respatializedHopefully this helps people sneak cljs into js shops as easily as clj could be snuck into jvm shops 🙏
https://www.youtube.com/watch?v=TgsTmIxAtxY#2022-08-0217:38roklenarcicwhat is the motivation here? Why would someone use this over shadow-cljs? i.o.w. what problem are you solving?#2022-08-0217:40borkdude@U66G3SGP5 Have you read the README?#2022-08-0217:43roklenarcicInteresting… so the idea is that it compiles .cljs but it is not the usual CLJS (with its goog closure dependency) but it is another thing entirely.#2022-08-0219:09Darrick WiebeJust looking at the commit history, I love that in 2 weeks you resurrected a project that hasn't had a commit in 11 years and put out a release! Does this project predate clojurescript??#2022-08-0219:42Cora (she/her)first clojurescript release was march 7, 2015, according to github#2022-08-0315:42joseI'm releasing clj-nix 0.3.0
There are 2 new helper functions:
• mkBabashka: Builds babashka with custom features (like sqlite)
• bbTasksFromFile: Helper to wrap the Clojure functions in a file as bash scripts. Useful to create nix shells with custom commands.
Full changelog: https://github.com/jlesquembre/clj-nix/blob/0.3.0/CHANGELOG.md
Docs: https://github.com/jlesquembre/clj-nix#2022-08-0315:45borkdudeAwesome. Feel free to PR here too: https://github.com/babashka/toolbox#2022-08-0315:53borkdudeclj-kondo 2022.08.03! clj-kondo ✨
• https://github.com/clj-kondo/clj-kondo/issues/1755: Fix false positive invalid-arity when using mapcat transducer in sequence with multiple collections
• https://github.com/clj-kondo/clj-kondo/issues/1749: expose clojure.pprint/pprint to the hooks API
• https://github.com/clj-kondo/clj-kondo/issues/698: output rule name with new output option :show-rule-name-in-message true. See example in https://github.com/clj-kondo/clj-kondo/blob/master/doc/config.md#show-rule-name-in-message.
• https://github.com/clj-kondo/clj-kondo/issues/1735 Add support for nilable map type specs
• https://github.com/clj-kondo/clj-kondo/issues/1744 Expose :imported-ns in analysis of vars imported by potemkin
• https://github.com/clj-kondo/clj-kondo/issues/1746 Printing deps.edn error to stdout
• https://github.com/clj-kondo/clj-kondo/issues/1716 Include dispatch-val in analysis of defmethod
• https://github.com/clj-kondo/clj-kondo/issues/1760 Add :arglist-strs support for functions defined with fn
• https://github.com/clj-kondo/clj-kondo/issues/1731: prioritize special form in name resolving
• https://github.com/clj-kondo/clj-kondo/issues/1739: Namespaced map type check fix
• Fix https://github.com/clj-kondo/clj-kondo/issues/1737: config-in-ns for specific namespace + ns-group override
• Fix https://github.com/clj-kondo/clj-kondo/issues/1741: Ignore redundant-call when single call is made in .cljc
#2022-08-0417:45ChaseQuick question, I use clj-kondo through clojure-lsp (unless I'm mistaken haha) so do I actually need to keep upgrading clj-kondo or can I just stick to upgrading clojure-lsp? Is the lsp relying on the version I have installed or does it come with it packaged?#2022-08-0417:47borkdude@U9J50BY4C clojure-lsp will upgrade eventually to this version, so if you're not using clj-kondo outside of your editor, there is no need to upgrade#2022-08-0417:43djanusAfter releasing https://github.com/nathell/skyscraper 0.3.1 a few days ago, I set out to write a little showcase for it, and uncovered several bugs in the less-well-trodden parts of the code. So let me introduce you to Skyscraper 0.3.2:
• Fix: Skyscraper no longer throws exceptions when using processed-cache and some of the processors don’t have :cache-template.
• Fix: Skyscraper no longer throws exceptions when the server returns multiple Content-Type headers.
• Fix: Processed cache no longer garbles non-ASCII strings on macOS.
And here’s the showcase I mentioned: https://danieljanus.pl/autosummarized-hn/ (https://github.com/nathell/summhn). Some GPT-3 included!#2022-08-0420:33lreadhttps://github.com/clj-commons/etaoin
The 38th release of Etaoin, but the first under the loving care of clj-commons!
Much thanks to @igrishaev for creating Etaoin and now entrusting it to our care.
A big thanks to @borkdude for all his moral, intellectual and borkcellent support.
Highlights from the https://github.com/clj-commons/etaoin/blob/master/CHANGELOG.adoc#v1038-minor-breaking:
• We are now Babashka compatible!
• Lint support augmented with a clj-kondo config!
• Docs and docstrings reviewed, reorganized, cljdoc-ified, and updated (with thanks for new tips and usages from @jkrasnay and @raimonster!)
• Various bugs squashed
• Automated test coverage now also includes Windows and macOS
• An Etaoin logo from @igrishaev (thank you for this parting gift Ivan!)
• Support for connecting to a remote WebDriver (thanks @verma & @mjmeintjes!)
Drop by #etaoin with any questions!#2022-08-0420:51borkdudeCongrats on this milestone!#2022-08-0422:31lreadThanks! And thanks for all your support!#2022-08-0423:42djanusThanks Ivan and Lee!#2022-08-0519:17Alex Miller (Clojure team)https://clojure.org/releases/tools#v1.11.1.1155 is now available
• https://clojure.atlassian.net/browse/TDEPS-228 Add support for auto inferred Sourcehut git urls (`http://ht.sr.user/project` => )
• Update aws-api, Maven, etc dep versions#2022-08-0821:05jmvHi all! Sharing the initial public release of https://github.com/nytimes/querqy-clj. This is a library for rewriting a user's search queries improve search relevance. See the https://cljdoc.org/d/com.nytimes/querqy-clj/0.7.0/doc/intro for a small motivating example.#2022-08-0821:58lilactownAnnouncing https://github.com/lilactown/eql-cli, a command line interface for executing EQL queries on EDN data. Powered by #pyramid and #babashka. babashka#2022-08-1107:46jamesVery nice, is there a preferred channel for eql-cli?#2022-08-1114:19lilactown#pyramid is fine for now#2022-08-0922:26jacob.mainehttps://github.com/clojure-lsp/lsp4clj vhttps://clojars.org/com.github.clojure-lsp/lsp4clj/versions/1.0.0
lsp4clj is a suite of tools for implementing a Language Server Protocol (LSP) server in Clojure. It underpins https://github.com/clojure-lsp/clojure-lsp.
Prior to this release, lsp4clj was primarily a wrapper for lsp4j, a Java library for building LSP servers.
This release removes our dependency on lsp4j. We now have a complete LSP implementation in Clojure. By removing lsp4j we’ve reduced the amount of reflection, making the Graal build more reliable, removed a ton of coercion to and from Java objects, and removed several transitive dependencies including xtend, gson and guava. We’ve also made it easier for servers built with lsp4clj to choose which parts of the LSP spec they want to implement, stay up-to-date with the spec, and manage concurrency with their preferred tools.
Follow up in #lsp#2022-08-1110:35dominicmExciting stuff. I might have to finally implement my lsp server 😜#2022-08-1409:45niquolaAwesome, we discussed it - but were lazy to start!#2022-08-1007:47tengstrandJust released https://github.com/polyfy/polylith/releases/tag/v0.2.15-alpha:
• https://github.com/imrekoszo/polylith-kaocha test runner - https://github.com/polyfy/polylith/pull/196
• XDG support - https://github.com/polyfy/polylith/pull/228
• Support for multiple source directories - https://github.com/polyfy/polylith/issues/206
• And more…#2022-08-1010:08EugenSo many improvements. Great work!
I like poly is using XDG directories - a ton of improvements.
Will update to it out now and give feedback.#2022-08-1010:10tengstrandGreat!#2022-08-1121:08Eugenwe upgraded and so far so good.
I will implement tests via polylith soon 🤞#2022-08-1012:34jpmonettasFlowStorm Clojure and ClojureScript debugger 2.3.131 is out
FlowStorm is a Clojure and ClojureScript debugger with some unique features.
2.3.131 includes new features :
- New lazy and recursive value inspector (https://jpmonettas.github.io/flow-storm-debugger/user_guide.html#_value_inspector)
- New tap tool to work with tap> (https://jpmonettas.github.io/flow-storm-debugger/user_guide.html#_taps_tool)
- Support for light and dark themes, in selected or automatic mode. Checkout the user guide for more info. (thanks to Liverm0r!)
- Thread tabs can be closed and reordered
- New functions for shutting down the debugger gracefully (for using in state components)
and a bunch of bug fixes.
Github repo : https://github.com/jpmonettas/flow-storm-debugger/
User Guide https://jpmonettas.github.io/flow-storm-debugger/user_guide.html
Show up in #flow-storm if you are interested in this kind of stuff.
Cheers!#2022-08-1013:44vemvInteresting!
It would help me (and likely other would-be users) to have an intro paragraph in the github explaining the what/why of the project
i.e. I see that it's a debugger, why should I pick yours? (nowadays I don't use a debugger at all tbh, open to going back to them)#2022-08-1013:50jpmonettashi @U45T93RA6, sure, good idea. I gave a talk reacently that goes over exactly that question, the slide is here: https://youtu.be/A3AzlqNwUXc?t=102#2022-08-1017:21jpmonettas@U45T93RA6 someone else was asking the same on redit, so there is also my answer there https://www.reddit.com/r/Clojure/comments/wkw8qr/comment/ijqq8a4/?utm_source=share&utm_medium=web2x&context=3#2022-08-1113:15vemvgreat read, thank you!#2022-08-1114:59Kelvinhttps://github.com/yetanalytics/flint has just been released.
From the changelog:
• Rework IRI, variable, blank node and literal implementations and add support for additional Java(Script) types.
◦ Implement protocols to define validation and formatting behavior IRIs, variables, blank nodes and literals, and apply extend-type/`extend-protocol` to default types.
◦ Add support for java.net.URI and js/URL IRI instances.
◦ Add support for java.time.Temporal timestamps (e.g. LocalDateTime and ZonedDateTime).
◦ Refine datatypes for numeric literals, e.g. Clojure integers are associated with xsd:long by default.
◦ Refine datatypes for date- and time-only timestamps, e.g. java.sql.Date and java.sql.Time are now associated with xsd:date and xsd:time, respectively. (Breaking!)
• Add :force-iris? optional arg in order to force datatype IRIs to be appended when formatting literals (with the exception of language-tagged strings).
• Add support for Unicode characters and percent encoding.
◦ Unicode characters are now supported in symbols and keywords.
◦ Percent encoding is allowed in prefixed IRI keyword names.
◦ (Clojure-only) Optimize string validation.
• Replace certain uses of s/or with multi-specs in order to simplify error messages.#2022-08-1116:37rickmoynihan🎉
Congratulations on this release… I’ve been looking at the 0.2.0 release in a lot more depth this afternoon, and so far it’s great!!
🙇#2022-08-1115:18oliyHi all, I've just pushed a new release of fixa
fixa lets you use fixtures at the level of individual tests in clojure
https://github.com/oliyh/fixa
The release brings two new features:
• fail-after
(deftest ^{:fixa/fail-after "2023-01-05"} christmas-decorations-test
(is (christmas-decorations)))
• run-after
(deftest ^{:fixa/run-after "2022-12-01"} future-v2-integration-test
(is (some-feature-only-available-in-v2)))
All feedback welcome#2022-08-1118:33Mitchell HarrisWhere has this library been all my life! I need this.#2022-08-1119:25Noah Bogartthis is very very cool#2022-08-1205:44Matthew MolloyHi team,
Has anyone here tried https://htmx.org? Its a great and simple way to do server side rendering. I've written a Clojure backend https://whamtet.github.io/ctmx/ that provides a react (or Clojure reagent) like UI style. It feels a lot like writing frontend Clojurescript except you are on backend JVM and have super fast load times - no JS!
Ctmx provides a defcomponent macro which is almost the same as defn except it stores symbol references in the metadata. You expose an endpoint with make-routes which recursively exposes all subcomponents and ties in seamlessly with the overlying htmx. This novel approach also opens up other possibilities. For example we maintain a call stack of components which we can use to auto-name fields. The autogenerated names can then reconstruct complex forms as JSON which always updates to match the UI of the form. It just makes web development so simple.
There is a simple template available with luminus lein new luminus my-project +ctmx. Update project.clj to ctmx 1.4.5 and then hit lein run. The above link shows some samples of how to work ctmx, I'd love feedback, suggestions for improvement etc.#2022-08-1206:10rickheereI use it in a clojure and nodes project. I got inspired to do so by reading the docs of https://biffweb.com/#2022-08-1208:47EugenI'm exploring it and porting a htmx calendar to clojure ctmx https://github.com/ieugen/jlp/ .#2022-08-1212:15Eugenwhat about it @U02N27RK69K?
@U02AM852K5F is whamtet on gh .
He made a new release and was asking for feedback / usage of ctmx#2022-08-1212:52Cora (she/her)whoops my bad I misread #2022-08-1212:52Eugenno harm done 🙂#2022-08-1213:06ennI’ve been intrigued by HTMX for a while, thanks for sharing this! Looks cool.#2022-08-1213:07Eugenyes. I am impressed. try it out, see for yourself#2022-08-1214:10vonadzI know @U7YNGKDHA uses it for https://biffweb.com/#2022-08-1223:41myguidingstarthat's great. What's the story for anti csrf attacks? I don't see that mentioned#2022-08-1301:16Matthew MolloyYou can just add it as middleware. If you are asking about ctmx then it just converts UI components into reitit routes. You can wrap that in middleware for authentication, csrf etc.#2022-08-1511:08Rupert (All Street)We've been using HTMX at All Street - it's been fantastic for us. It embeds nicely inside of Hiccup pure data structures.#2022-11-0312:39Casey@U02AM852K5F If we have some ctmx related questions (that aren't really bugs so not suitable for a GH issue), do you have a channel here we could ask in?#2022-08-1220:36grzmHi! I scratched an itch and released a https://www.rfc-editor.org/rfc/rfc6570 library: https://github.com/grzm/uri-template There are a couple others already out there. This one uses https://github.com/cognitect-labs/anomalies instead of throwing exceptions, and returns detailed parse information in the event of an error.#2022-08-1508:29rickmoynihanThere’s also another clojure one here that a colleague of mine wrote a few years back here:
https://github.com/lkitching/clj-templates
He’s not much of a self publicist and never even added a README, but it’s pretty solid, well tested and easy enough to use.#2022-08-1708:28Mark WardleHermes v1.0.712 https://github.com/wardle/hermes/releases/tag/v1.0.712. Hermes can be used as a library or as a standalone microservice, providing access to SNOMED CT, a comprehensive health and care terminology/ontology. It also provides cross mapping to other codesystems, including ICD-10.
It's now been stable in production in a number of healthcare facilities without difficulties, mainly due to Apache Lucene, LMDB and, most importantly, its functional, read-only, immutable design approach inherited from Clojure. I built similar tooling in Java and Go previously, but those languages did not make it easy to write the functionality needed, hitting a wall of complexity or being brittle to adapt to change, in ways I simply haven't experienced using Clojure, while using a 1/10 of the number of lines of code!#2022-08-1814:07pezCalva https://github.com/BetterThanTomorrow/calva/releases/tag/v2.0.293 is out. It makes me happy to see three new code contributors in the latest few releases. Warms thanks to @ajoberstar @maksimrv @am ❤️ 🙏. As warms thanks to the usual suspects too!
Main news since last announced, Calva now:
• has improved clojure-lsp integration
• has an experimental first version of Clojure Notebooks (my crystal ball for this reveals the blurring of regular REPL driven development and Notebook workflows)
• offers customizable inline result styling
• defaults to inject fresh versions of nREPL and related tools
• contains fewer bugs (haha, well, I actually think that recently we have fixed more than we have added)
calva#2022-08-1817:09greglookAn initial release of https://github.com/amperity/separator is hot off the presses! This is an open-sourced version of Amperity's internal CSV parsing library, which we developed in response to the truly wild variety of delimiter-separated value data we were getting from our clients. Separator's primary purpose is customizable and defensive parsing, allowing it to handle many kinds of messy data files without exploding. With that, it's still significantly faster and more efficient than clojure.data.csv, but not quite as fast as Jackson. It also includes writing capability, making it a general-purpose DSV codec.#2022-08-1909:04eskosThe worst CSV I’ve ever heard of (thankfully not encountered myself) is of IIRC Danish origin, where due to diacritic characters and overloaded escaping the field delimiter is "" - yes, two double quotes.
I don’t expect anyone to support this, this just reminded me of that…thing.#2022-08-1818:09borkdudeIntroducing ClavaScript, a ClojureScript syntax to JavaScript compiler!
The primary use case for clava (its short name, not to be confused with Calva) is to produce JavaScript using ClojureScript syntax while producing ultra-small bundle sizes, by leveraging the JS platform directly. Clava does not protect you from the pitfalls of JS (mutability, equality), but lets you use the concepts you already know from ClojureScript and maps them more or less directly to JS where this makes sense. It comes with a standard library which has many of the core functions you know: map-indexed , for example, works like you would expect, but returns a mutable JS array instead of an immutable vector.
Repo: https://github.com/clavascript/clavascript
Npm: npm install clavascript
Read https://github.com/clavascript/clavascript#differences-with-clojurescript for... well, the differences with ClojureScript.
It has support for https://github.com/clavascript/clavascript#asyncawait and https://github.com/clavascript/clavascript#jsx.
Clava is open to contribution, especially in the area of porting core functions.
An example of a SolidJS app written using Clava:
https://clavascript.github.io/demos/clava/solidjs/ (https://github.com/clavascript/clavascript/blob/main/examples/solidjs/src/App.cljs)
Give it a spin and let us know what you think in #clavascript
On behalf of the Clava core team (@borkdude, @lilactown, @corasaurus-hex): enjoy!#2022-08-1818:46pezExciting stuff! Are there plans for a clava REPL?#2022-08-1818:47borkdudeYes!#2022-08-1818:48borkdudeThe roadmap is roughly:
• Support macros
• Support REPL
and in parallel:
• extend stdlib / protocols / transducers#2022-08-1818:51pezHave you had a look at the coming JavaScript Records and whatever the vector type is named, in regards to how they might be relevant for ClavaScript?#2022-08-1818:52borkdudeYes, discussion here:
https://github.com/clavascript/clavascript/discussions/38#2022-08-1819:47athomasoriginalHow does this compare to Cherry? If I were to assume, it sounds like Cherry is meant to be Clojure with ES6 output, whereas this is a skin over JS? Very cool project!#2022-08-1819:50borkdude@U6GNVEWQG Cherry and clava are very similar: in fact, clava is a fork of cherry but lives in its own repo now so it can be developed independently. Both output es6 code to integrate well with JS tooling and esbuild treeshaking#2022-08-2018:47Jeongsoo LeeI am so looking forward to the day when we can seamlessly write Clojure expressions in a <script> tag#2022-08-2018:50borkdude@U01LJQRJ2AU Check out https://github.com/babashka/scittle#2022-08-2018:52Jeongsoo Lee@borkdude Of course we can, your highness!#2022-08-2305:33eccentric JThis is cool! I think cherry might be THE cljs experience I have been daydreaming about 🤤#2022-08-2406:30mozinator2I think this will finally make #remix possible ! https://remix.run#2022-08-1819:05tony.kayFulcro 3.5.24 release to Clojars.
The new version supports composing a transaction during routing that can run in pessimistic mode so that the parent’s ops complete before children. See https://book.fulcrologic.com/#_path_ordered_pessimistic_transactions_requires_fulcro_3_5_24#2022-08-2118:11ambrosebshttps://github.com/plumatic/schema 1.4.0
Adds https://plumatic.github.io/schema/schema.core.html#var-defprotocol for documenting and instrumenting protocol methods.
(s/defprotocol MyProtocol
"Docstring"
:extend-via-metadata true
(^:always-validate method1 :- s/Int
[this a :- s/Bool]
[this a :- s/Any, b :- s/Str]
"Method doc2")
(^:never-validate method2 :- s/Int
[this]
"Method doc2"))#2022-08-2205:11robert-stuttafordso cool that this library is still going and still providing its same good value!#2022-08-2209:22vemvVery cool! Curious, is it a zero-cost abstraction? That is, when checking is off, ideally this would be identical to vanilla protocol usage.
With clojure.spec hacks normally there's a backing defn, which adds indirection and a cost.
I've been meaning to try again for a while.#2022-08-2223:31ambrosebs@U45T93RA6 mostly no, there is a cost. there are essentially 3 different modes: instrumentation on, instrumentation off, and leave as-is (see the docstring for the 3rd). In the first two, inlining is disabled, so direct calls will pay an extra indirection + cache lookup in those cases. In normal wrapped calls, there is an extra indirection that also passes the cache via set! to the "actual" protocol function.#2022-08-2223:32ambrosebsperhaps it's a good idea to use the 3rd mode in prod, then it would be zero-cost (at least, that's what I intended).#2022-08-2223:33ambrosebsyou can move between mode 1 and 2, but mode 3 is permanent. so yeah, it's probably a good candidate for prod.#2022-08-2306:09vemvPerhaps the docstring could be a little clearer since one might not immediately know/remember what inlinling is, etc.
Also if this is problematic for your environment is bit of a strange wording, because disabling checking in production is something I'd do out of principles, not because of 'problems'
Anyway this does look like a great defprotocol. It looks like one could do this at macroexpansion-time?
(if *assert*
s/defprotocol
defprotocol)
With other solutions I've seen (and written!) one can't, because the method names for declarations will be different vs. the method names for usages.#2022-08-2320:46ambrosebsAgreed, actually the wording assumes you'd only want this if Clojure's implementation details change and breaks instrumentation. I didn't really consider you could use it for perf reasons until this conversation.#2022-08-2320:53ambrosebs> With other solutions I've seen (and written!) one can't, because the method names for declarations will be different vs. the method names for usages.
Yes, I studied your impl in speced.def while designing this, and s/defprotocol does not rename methods. the same name is used to extend and invoke.#2022-08-2321:06ambrosebsUpdated doc: https://github.com/plumatic/schema/commit/0a699d7715de623e15ddc1dbc69ae1b634860e4f#2022-08-2410:12vemvNot sure if there was anything worth studying :)
Is the gist of your solution the following? It works, would love to port it to speced.def.
Please LMK if there's some missing piece
(clojure.core/defprotocol P
(do-it [this]))
(def sync! (fn [^clojure.lang.AFunction outer-mth
^clojure.lang.AFunction inner-mth]
(when-not (identical? (.__methodImplCache outer-mth)
(.__methodImplCache inner-mth))
;; lock to prevent outdated outer caches from overwriting newer inner caches
(locking inner-mth
(set! (.__methodImplCache inner-mth)
;; vv WARNING: must be calculated within protected area
(.__methodImplCache outer-mth)
;; ^^ WARNING: must be calculated within protected area
)))))
(let [inner-method do-it
instrument! (fn [f] ;; the value of @#'do-it
(fn [x] ;; a fn with the same sig as do-it
(assert (pos? x)) ;; an example assertion, as it would be provided by users
;; invoke whatever `do-it` does:
(f x)))
outer-method (instrument! inner-method)]
(alter-var-root #'P assoc-in [:method-builders #'do-it] (fn [cache]
(set! (.__methodImplCache outer-method) cache)
(sync! outer-method inner-method)
outer-method))
(alter-meta! #'do-it assoc :inline (fn [& args]
`((do ~(symbol #'do-it))
#2022-08-2410:15vemv(also, does that do in the alter-meta! add something?)#2022-08-2415:27ambrosebs@U45T93RA6 yep, looks like it covers all the bases for Clojure JVM. the do is the dirty hack to stop the compiler inlining the method call: ((do do-it) ...) doesn't inline, but (do-it ...) can.
these tests should fail without the do https://github.com/plumatic/schema/blob/0a699d7715de623e15ddc1dbc69ae1b634860e4f/test/cljc/schema/core_test.cljc#L1710-L1730#2022-08-2415:29ambrosebsI wanted to make a shared library with these ideas but I couldn't decide which functions to expose. Once we have a few impls, maybe it'll be more obvious.#2022-08-2415:30ambrosebsthere was also interest in adding this to malli.#2022-08-2415:33vemvThanks much :) will see if I can create a tiny ns with the core ideas#2022-08-2417:07vemvBesides from sync! , I think I'd only need this defn:
(defn instrument! [protocol-var
fns #_{#'foo ;; a var from the protocol, to be instrumented
(fn [f] ;; always receives a single function `f`, representing the original value of @#'foo
(fn [this x y z] ;; consumers must build this argv the right arities, for each method (and possibly for each arity of the method)
(f this x y z)))} ;; consumers must build the right calls to `f`
]
(doseq [[var-ref wrapper] fns
:let [inner-method @var-ref
outer-method (wrapper inner-method)]]
(alter-var-root protocol-var assoc-in [:method-builders var-ref] (fn [cache]
(set! (.__methodImplCache outer-method) cache)
(sync! outer-method inner-method)
outer-method))
(alter-meta! var-ref assoc :inline (fn [& args]
`((do ;; do: for preempting inlining
~(symbol var-ref)) ;; n.b. `symbol` shortcut not available in older clojures
individual libraries (e.g. speced.def, malli-whatever) would be responsible for passing the right fns map. Each library likely does its own parsing anyway so it's not much of a requirement
This API would make sense for me for speced.def. I just tried it now with some speced/fn s and it works - would fit for a defprotocol reimpl.
Would be thankful if you release this as an isolated library. I actually have to be pedantic about copyright :)#2022-08-2417:09vemv(Also since I use malli at work, I'd give two separate usages to it!)#2022-08-2417:22ambrosebsThanks @U45T93RA6! I'll spin up a lib.#2022-11-2115:44vemvHey there :)
was there luck with the lib?#2022-08-2407:48bozhidarCIDER 1.5 ("Strasbourg") is out! Check out the release notes for more details https://github.com/clojure-emacs/cider/releases/tag/v1.5.0 Cheers! cider
P.S. This release is dedicated to the brave people of Ukraine, who today celebrate their Independence Day, and their European future! Слава Україні!#2022-08-2407:57Dimitar UzunovГероям слава#2022-08-2407:52bozhidarShortly afterwards I thought today might be a good day for an nREPL 1.0 release, so now that's done as well https://github.com/nrepl/nrepl/releases/tag/1.0.0 🎉 There's always a lot more we can do, but I think the project is in a really great shape, compared to where it was in 2018 and deserves for this to be reflected in the version number. 🙂 Stay tuned for some updates regarding the plans for the future there!#2022-08-2407:55Christian JohansenThank you for your amazing work on this invaluable piece of tooling. Couldn’t go a day without it 🙂#2022-08-2411:17Eugenhere here 🙂#2022-08-2416:24wevremhear hear 🙂#2022-08-2503:26HuahaiEditscript 0.6.1 is released. Editscript is a diffing and patching library for Clojure/script data structures. This release added options to control granularity of string diffing, so it can be character, word, or line level diffing, allowed specifying a timeout when diffing, and a few other improvements. https://github.com/juji-io/editscript#2022-08-2510:33plexusNew release of com.lambdaisland/classpath, which adds the ability to recursively watch deps.edn files for changes, when using :local/root https://github.com/lambdaisland/classpath#2022-08-2513:18athomasoriginalNice! Is the goal of a tool like this to improve the dev workflow by automatically fetching new deps with restarting the app? Or rather, when you use a tool like this, what wins did you observe?#2022-08-2607:09plexusThe benefit is that you don't need to restart, you can add or upgrade deps and they will become available to the process immediately.#2022-08-2602:09wilkerlucioPathom 3 2022.08.29-alpha is out! https://clojars.org/com.wsscode/pathom3
This release includes some fixes and a couple of nice new planner optimisations, in special there is one finally capable of optimising sibling similar OR branches (check the attached image, before on the left, after on the right). These optimisations are still experimental, to use than you need to add the flag ::pcp/experimental-branch-optimizations in your env (if you find any issue with them active, please make a report).
Changes:
• Add support for ::pcr/wrap-merge-attribute hook in async and parallel runners
• Add support for ::pcr/wrap-merge-attribute hook on idents (all runners)
• Fix issue #152 missing shape check when data value is nil
• Optimize AND siblings with same branches
• Optimize OR siblings with same branches 🎉
• Optimize AND branch that has same branch structure as parent
• New branch optimizations are opt-in via ::pcp/experimental-branch-optimizations flag at env
• Fix ::pcr/wrap-mutation-error, now working in all runners#2022-08-2718:13timonkot13Hello, I want to present my humble template https://github.com/timonkot131/clojurescript-screeps-webpack. It uses webpack with babel for bundling instead of the Closure's advanced optimizations. I have seen some of the Screeps projects on github, but all of them use optimizations. These optimizations are really nice when you are deploying your code to prod, so your script loads pretty fast, but this is not the case for deploying for Screeps, because it doesn't produce understandable error messages due to massive minifications. So I decided to create this project to resolve this issue.
The template doesn't do a lot of stuff, it just compiles the code via https://github.com/thheller/shadow-cljs and bundles it via https://github.com/webpack/webpack with https://webpack.js.org/loaders/babel-loader/, thus compiled code can be executed in node 8 environment on screeps server.#2022-08-2718:17p-himik> it doesn't produce understandable error messages due to massive minifications
Is there no way to make Screeps use source maps?#2022-08-2718:28timonkot13shadow-cljs doc says what this is possible https://shadow-cljs.github.io/docs/UsersGuide.html#compiler-options. I will check this out to see if this will work#2022-08-2719:06MegaMattI think i’ve been able to get good node stack traces with a combination of the compiler options and the npm package source-map-support#2022-08-2720:51timonkot13I think source-map support is a good feature to have, thus I created an issue for it. I think we may continue the discussion about this topic there https://github.com/timonkot131/clojurescript-screeps-webpack/issues/1.
@U02SD8PATK2
So how do you implement it? Can you show your config or leave a link to a project?#2022-08-2801:44MegaMattI don't any longer. it was in a now abandoned project. but if i recall correctly in the entry file i just required it like so.
(ns some.ns
(:require ["source-map-support/register"]))
I was using deps.edn and. my build config set
:optimizations :simple
:target :nodejs
:bundle-cmd {:default ["npx" "webpack" "./out/main.js" "-c" "./webpack.config.js"]}
and my webpack is
const path = require('path');
module.exports = {
mode: 'production',
entry: './out/main.js',
target: 'node',
// devtool: 'source-map',
output: {
path: path.resolve(__dirname, 'deploy'),
filename: 'main.js',
},
};
I don't remember if there was anything else involved as this was quite a while ago. I was deploying things to a lambda.#2022-08-2812:03timonkot13Actually, I have ended up with the same solution as you, but with (.install (js/require source-map-support)). It works fine with nodejs, but in the screeps environment, it shows this error
Error: Unknown module 'path'
at Object.requireFn (<isolated-vm>:20840:23)
at Object.path (main:26726:18)
at __webpack_require__ (main:26750:41)
at Object../node_modules/source-map-support/source-map-support.js (main:22859:12)
It looks like the library uses the "path" module, which is probably constrained by devs. I tried your version, but the error is keeping the same, anyway thanks for the answer.
I feel that the possible workaround may be the retrieveSourceMap callback: https://github.com/evanw/node-source-map-support#options#2022-08-2816:53timonkot13@U2FRKM4TW After all, I think this is possible, You just need to consume it via https://github.com/mozilla/source-map and implement error mapping. Like here https://stackoverflow.com/questions/51035699/screeps-how-do-i-set-up-source-map-using-typescript-and-webpack#2022-08-2913:08bortexzReleased first version of https://github.com/bortexz/resocket , a Clojure WebSocket client (wrapping JDK11 WebSocket) exposing a core.async API, a`reconnector` fn that keeps creating new connections when current ones are closed, automatic ping at given intervals, abort idle connections, etc#2022-09-3015:05Byron ClarkThank you for this library. I used it for a prototype recently and loved the interface and simplicity.#2022-08-2913:46blueberryDeep Diamond 0.25 released with RNN support on CPU and GPU! The fast Clojure Deep Learning library. https://github.com/uncomplicate/deep-diamondhttps://t.co/PVwsqO5ID1#2022-08-2921:22uochanJust released vim-iced ver 3.11.3086, Clojure Interactive Development Environment for Vim8/Neovim.
https://github.com/liquidz/vim-iced
Added evaluation in context like CIDER :)
https://liquidz.github.io/vim-iced/#evaluate_in_context#2022-08-2922:56sheluchinThis evaluate-in-context functionality is great. I really like being able to test in the REPL without having to make back and forth edits all the time. e.g. if I'm testing out a new query function, I can just provide the DB connection and query parameters using eval-in-context and repeat execution with the same context/paramers through as many iterations of the function as I need to get it right, never having to hardcode test values into the source code I'm testing.
Thanks very much @UBL24PLE6.#2022-08-3000:31rschmuklerAnnouncing tapestry-0.3.0-SNAPSHOT - seeking feedback or thoughts (message me or post in #teknql) on the new APIs before potentially releasing it with the GA release of JDK 19 later in september.
Changes:
• Added tapestry.core/interrupt! to interrupt fibers.
• Added tapesty.core/timeout! to set a timeout on fibers
• Added tapestry.core/alive? to see whether a fiber is still alive
• Refactored fibers to use a custom tapestry.core/Fiber type allowing for better introspection (custom print-method) as well as the functions above. Takes us a step away from manifold (used to return deferreds) and toward built-in JDK stuff.
• Removed custom tapestry.core/locking implementation - was needed when loom and clojure.core/locking didn't play well together (Monitors weren't yet supported).
• Updates to the JDK 19 APIs instead of the loom preview build APIs.
• Updated the readme w/ JDK 19 installation instructions and examples of the new APIs
Check it out here:
https://github.com/teknql/tapestry#2022-08-3001:30didibusLooks good. It'll be interesting to see what kind of various async abstractions eventually develop on top of loom, tapestry looks like a nice start.
I'm also curious to see core.async loom support and maybe promesa loom support, as well as Missionary or other structured concurency approach#2022-08-3013:53Joshua SuskaloI will say I doubt if core.async will do anything to support loom (because it needs to support JDK versions from 8 ). Most likely the easiest way to handle it will be to monkey patch it so that go blocks just use tapestry and parking put and take get replaced with the blocking ones.#2022-08-3017:44hlshipWell, I have to say you chose a really great name!#2022-09-0409:15orestisWasn't tapestry a Java web framework? #2022-08-3013:19borkdudefs 0.1.11 (File system utility library for Clojure)
https://github.com/babashka/fs
• https://github.com/babashka/fs/issues/65: Explicitly support :win-exts option on which function (https://github.com/lread)
• https://github.com/clj-kondo/clj-kondo/issues/1782: exists? should never throw on illegal input path.
• Remove ^:const to not cache OS-specific constants, so AOT-ed code can be re-used in multiple OS-es.
#2022-08-3016:57Darrick WiebeI've updated and released Jordan Lewis's data.union-find 1.0.0 It's a clean and fast implementation of the Union Find algorithm for quickly finding groups of interrelated elements.
https://github.com/jordanlewis/data.union-find
This version updates from the previous 0.1.0 release with support for fast construction using transient/persistent!
I used this library as it is now in 2015 for a drug discovery project and it worked great. Unfortunately that variant was never properly released. I recently came back to it for a different project and asked Jordan to update the release. He asked me to take it over instead, so I have. I don't expect any significant changes in the future since I think it's feature complete and stable.
If you aren't familiar with Union Find, you should check it out. It's a simple idea and quite useful!#2022-08-3017:10respatializedhttp://www.frankmcsherry.org/graph/scalability/cost/2015/01/15/COST.html
I first read about union-find in this engagingly written (and frankly devastating) takedown of Scalable:tm: "big data" systems. Thanks for releasing this implementation!#2022-08-3018:00Charles ComstockI've used https://github.com/huahaiy/nifty/blob/master/src/nifty/disjoint_set.cljc for this in the past as it supports both CLJ and CLJS. I know it can be tricky to support both, but it's really appreciated when implementations of fundamental data-structures support multiple platforms. I am curious how the data.union-find implementation compares on performance though.#2022-08-3018:23HuahaiBy looking at the code, the data.union-find library seems to have immutable semantics, having transient and such, whereas mine is a faithful implementation of the mutable algorithm of union-find in Clojure syntax. Mine also use loop-recur instead of explicit recursion, so it probably won’t blow the stack.#2022-08-3018:24Darrick Wiebe@UFTRLDZEW Thanks for the link!
@UMGAMGWF8 interesting, thanks for the pointer to the nifty lib. I hadn't seen it before. I'd definitely be curious about the relative performance between these implementations. I see that nifty also implements disj which is nice.
@U0A74MRCJ you're right, I was just writing the same thing!#2022-08-3018:25Darrick WiebeIn practice I haven't seen any problem with blowing the stack even with reasonably large scale usage, but it's something to consider.#2022-08-3110:43Ertugrul CetinHi everyone 👋:skin-tone-2:
I created a simple 3D demo with PlayCanvas. Also used Odoyle Rules for the logic. I hope you like it!
GitHub: https://github.com/ertugrulcetin/playcanvas-cljs-demo
Live Demo: https://ertugrulcetin.github.io/playcanvas-cljs-demo#2022-08-3115:44borkdudeA new version of https://babashka.org/scittle/: execute Clojure(Script) straight from browser script tags via SCI.
0.3.10
• Add scittle.promesa.js plugin. This gives access to the https://cljdoc.org/d/funcool/promesa/8.0.450/doc/user-guide library.
• Add scittle.pprint.js plugin. This gives access to https://cljs.github.io/api/cljs.pprint/.
• Improve error messages
https://github.com/babashka/scittle/releases/tag/v0.3.10
Channel: #scittle#2022-08-3118:37eccentric JThis is perfect#2022-08-3120:46wilkerlucioawesome! where can I find the CDN link to include promesa?#2022-08-3121:06borkdudeoh good point, let me update that#2022-08-3121:08borkdude@U066U8JQJ
https://github.com/babashka/scittle/releases/tag/v0.3.10#2022-09-0117:22ericdalloclojure-lsp Released https://clojure-lsp.io/ https://github.com/clojure-lsp/clojure-lsp/releases/tag/2022.09.01-15.27.31 with lots of exciting stuff! 🚀
This is a important release, it starts to use https://github.com/clojure-lsp/lsp4clj v1 which is entirely implemented in clojure and doesn't depend on lsp4j java library anymore, along with the dep-graph-queries feature, it's a big change to whole clojure-lsp so if any issues, please let us know
Besides that we have lots of new refactorings (check gif for one of them), fixes, performance improvements and smart checks during startup like the classpath scan fail question
Thanks and kudos to @jacob.maine who have been helping a lot clojure-lsp in the last months! gratitude
For more info, check #lsp
Happy coding! clojure-spin#2022-09-0120:02jacob.maineAnother refactoring in this release, or actually a set of 4 related refactorings:#2022-09-0121:54wilkerluciowow, restructure-keys looks awesome!#2022-09-0203:22Cam SaulHello everyone. I'd like to announce a brand new tiny library that fixes a personal pain point.
https://github.com/camsaul/humane-are
I've been using some version of this or another for a while now; I thought it was finally time to spin it out into a separate library, in case anyone else found it useful.
I love clojure.test/are, but I've generally avoided it for two reasons:
1. Failing assertions give no indication as to which set of arguments failed if you're using anything that pretty prints test output, such as https://github.com/pjstadig/humane-test-output, https://github.com/clojure-emacs/cider, or https://github.com/weavejester/eftest
2. are lets you shoot yourself in the foot by writing expressions that include is or testing, and wraps them in another is without complaining
Humane Are solves those problems. Try it out and let me know what you think!#2022-09-0204:53seancorfieldThis is cool. clojure.test can be pretty frustrating and quite limited. I will take this opportunity to promote Expectations:
{:tag :a, :attrs {:href "/cdn-cgi/l/email-protection", :class "__cf_email__", :data-cfemail "88fbede9e6ebc8dbede9e6a5ffe1e6a5b9b9a5e4e9f8fce7f8"}, :content ("[email protected]")}
Completely clojure.test-compatible in terms of tooling but a lot more expressive.#2022-09-0211:46borkdudeI've been avoiding are mostly in favor of doseq#2022-09-0211:50borkdudeAlso, I find giant are blocks a pain when you want to isolate one case to work on in the REPL#2022-09-0213:28Noah BogartI wonder if this could be upstreamed.#2022-09-0207:04slipsethttps://clojars.org/clj-commons/clj-yaml is released with a bump of snakeyaml to 1.31. This fixes https://github.com/advisories/GHSA-3mc7-4q67-w48m. Thanks to @tscrowley for the PR!#2022-09-0416:29djanusI’ve released version 0.3.3 of https://github.com/nathell/skyscraper, a framework for structurally scraping whole sites in Clojure. Get it from Clojars: {skyscraper/skyscraper {:mvn/version "0.3.3"}}
Changes in this release:
• Feature: To facilitate debugging, processors can now set the :skyscraper/description key on contexts. These descriptions will be logged when downloading, instead of the URL, and won’t be propagated to child contexts.
• Fix: Skyscraper now properly closes the cache when using scrape! and one of the processors throws an exception.
• Fix: Skyscraper no longer complains when the server returns a quoted charset in the Content-type header.
• Fix: :skyscraper.traverse/priority is no longer propagated to child contexts.
• Infra: Skyscraper’s dependencies are now managed with cli-tools, with Kaocha being used for testing. #2022-09-0519:30djanusTurned out I rushed with the announcement. Due to a misconfiguration (a failed attempt at migrating away from Leiningen to deps.edn), the pom.xml from 0.3.3 declared no dependencies.
I've now pushed 0.3.4 which has a correct dependency listing and is otherwise the same as 0.3.3. Apologies and happy scraping!#2022-09-0417:31seancorfieldcom.seancorfield/honeysql {:mvn/version "2.3.928"} -- turn Clojure data structures into SQL:
• Address https://github.com/seancorfield/honeysql/issues/425 by clarifying that INTERVAL as special syntax may be MySQL-specific and PostgreSQL uses difference syntax (because INTERVAL is a data type there).
• Address https://github.com/seancorfield/honeysql/issues/423 by supporting DEFAULT values and DEFAULT rows in VALUES.
• Address https://github.com/seancorfield/honeysql/issues/422 by auto-quoting unusual entity names when :quoted (and :dialect) are not specified, making HoneySQL more secure by default.
• Fix https://github.com/seancorfield/honeysql/issues/421 by adding :replace-into for :mysql dialect.
• Address https://github.com/seancorfield/honeysql/issues/419 by adding honey.sql.protocols and InlineValue with a sqlize function.
• Address https://github.com/seancorfield/honeysql/issues/413 by flagging a lack of WHERE clause for DELETE, DELETE FROM, and UPDATE when :checking :basic (or :checking :strict).
• Fix https://github.com/seancorfield/honeysql/issues/392 by adding support for WITH / (`NOT`) MATERIALIZED -- via PR https://github.com/seancorfield/honeysql/issues/420 https://github.com/robhanlon22.
Follow-up in #honeysql#2022-09-0418:38djanusAnd I have another announcement to make!
Announcing https://github.com/nathell/cartestian, a small experimental library that helps write more comprehensive tests. From the README:
> In the life of a developer who writes tests for their software, there are always two (or more) possibilities. In an A/B test, either your user is assigned to group A, or to group B. Either that API call succeeds, or it fails. The list goes on.
> Oftentimes, we are tempted to only test the happy path. But it would be good to test all the combinations – a Cartesian product of the “dimensions”, if you will. Or at least a reasonably-sized subset of them, if the possibility space is large.
> This library helps you to do just that.
I’d love to hear any feedback on this one. Do people think it’s a good idea? The library is so experimental that I’m not yet building any artifacts nor publishing them on Clojars, but if there’s interest I’ll start doing so.#2022-09-0418:56seancorfieldThis is interesting. I think one of my biggest problems when trying to test across combinations is how to specify what the expected outcome should be, especially if there's a failure mode that throws an exception. How are you typically mapping from "possibilities" to outcomes in your combination tests?#2022-09-0419:05djanusGreat question! It will broadly depend on the particular combination of possibilities (the v in the example), but how exactly depends on the test.
For example, in https://github.com/nathell/skyscraper/blob/master/test/skyscraper/cache_test.clj#L59-L75, I’m checking for the :succeeding dimension to determine expected behaviour. Admittedly a more advanced example would be in order, though.#2022-09-0713:22MaxThis seems similar in spirit to property-based testing (eg test.check). I'm interested in your thoughts on the overlaps and differences with this approach?#2022-09-0716:25djanusI was thinking this too! Think this is a “sub-concept” of property-based testing: more coarse-grained and arguably easier to grasp. I found writing a test.check generator can be tricky. But I guess cartestian could be theoretically rewritten in terms of test.check. 🙂#2022-09-0421:28borkdudeA new version of #babashka! Lots of updates, bug fixes and error location improvements.
0.9.162 (2022-09-04)
• https://github.com/babashka/babashka/issues/1343: Fix postgres feature
• https://github.com/babashka/babashka/issues/1345: add .ssl.SSLException and java.net.SocketTimeoutException classes (https://github.com/lread)
• Fix satisfies? with marker protocol (no methods)
• Update rewrite-clj
• Update deps.clj
• Update babashka.cli
• Update org.clj-commons/clj-yaml
• babashka.fs: fix expand-home on Windows
• babashka.fs: expose :win-exts
• nREPL: preserve stacktrace on exception
• Fix https://github.com/babashka/babashka/issues/1322: improve error location
• Fix https://github.com/babashka/babashka/issues/1338: add-watch segfault
• Fix https://github.com/babashka/babashka/issues/1339: resolve record name ending with dot.
(Also, there's a new project brimming in #babashka-bbin which will be announced later, after more people test it.)#2022-09-0610:18mariaWe are super happy to finally announce the projects for the next funding round of ClojuristsTogether https://www.clojuriststogether.org/news/q3-2022-funding-announcement/ 🎉 We are funding 6 projects with 9000 USD and 5 projects with 2000 USD. The projects and grantees are:
USD 9,000
- Matthew Huebert for https://www.maria.cloud/
- Sam Ritchie https://github.com/mentat-collective/mathbox.cljs
- Kira McLean for https://github.com/scicloj/clojure-data-cookbook
- Christophe Grand and Baptiste Dupuch for https://github.com/Tensegritics/ClojureDart
- Michiel Borkent for https://github.com/borkdude
- Arne Brasseur and Gaiwan for https://github.com/lambdaisland/kaocha
USD 2,000
- Chris Badahdah for https://github.com/djblue/portal
- Will Acton for Exo (unreleased)
- Vlad Protsenko for https://github.com/cljfx/cljfx
- Jacob O’Bryant for https://github.com/jacobobryant/biff
- Adam Helins for https://github.com/clojupedia/main
A big thank you to all our members for the support! We couldn’t fund those projects without you 💙 💚#2022-09-0611:40mpenetNew version of https://github.com/exoscale/interceptor released (0.1.14) - This adds bb + fixes cljs support - thanks to @borkdude for the work on bb and other related bits.#2022-09-0611:49mpenetand github is down... good timing#2022-09-0611:50jjttjjThanks to both of you for doing this! I've been happily using a 1 line change quick hack to use interceptor on bb, great to see it in master now babashka#2022-09-0611:58borkdude@U064UGEUQ The currently released version does require bb from master#2022-09-0611:58borkdudeI think#2022-09-0611:58borkdudemaybe not#2022-09-0612:01borkdudeat least, it's tested with that but might still work with the oldest. Also added compatibility with auspex, which does require master and it's tested with that on CI in interceptor#2022-09-0612:02borkdudeThe core.async integration does need master. @U064UGEUQ what are you using interceptor for?#2022-09-0612:12jjttjjGood to know, I haven't been using the async stuff yet but may at some point. I've been using the interceptor pattern with https://github.com/cognitect-labs/aws-api / https://github.com/grzm/awyeah-api to do stuff with requests/responses. For instance, mocking out the clients during testing, making sure dynamobdb requests include asking for consumption pricing info then recording that info somewhere when we get it in the response#2022-09-0612:25borkdudeOh that's good to hear /cc @U0EHU1800 ^#2022-09-0613:33Carsten BehringVersion 0.4.0 of https://github.com/scicloj/sklearn-clj is released!
sklearn-clj gives easy access to most Python sklearn estimators from Clojure standalone or as a plugin into
Changes in this release are:
* fix result of predict to be a probability distribution
* fixed serialization of contexts containing sklearn-clj models
* allow reverse-mapping of categorical variables of prediction#2022-09-0715:54mkvlr🔭 Clerk – Moldable Live Programming for Clojure io.github.nextjournal/clerk {:mvn/version "0.10.550"} has been released . ✨
Also we've finally started to put together documentation so we're happy to present the 📓 https://snapshots.nextjournal.com/clerk/build/b12d8b369a69ca4b41fcf4988194dfbc201c6e1c/book.html.
Notable improvements in this release:
• 🙈 Support setting visibility for results, per form and per doc
• :sleuth_or_spy::skin-tone-2: Fail eval if var is only present at runtime but not in file
And more, details in the:wood: https://github.com/nextjournal/clerk/blob/2e8cef8e238afa962c7e0ac1ed6238c3db040821/CHANGELOG.md#010550-2022-09-06, get the release on 📦 https://clojars.org/io.github.nextjournal/clerk, follow-up in #clerk.#2022-09-0718:32Ivar RefsdalHi! Here is https://github.com/ivarref/healthy, a tiny library to simplify writing health checks, this time with a new release: com.github.ivarref/healthy {:mvn/version "0.1.17"}
It provides a "sliding window" into your application's errors, allowing you to see if it recovers or not once an error has occurred.
This new release adds the concept of error-percentage, allowing a service to return healthy/unhealthy based on some percentage of failures.
Hope it is useful for someone. 😊#2022-09-0718:37practicalli-johnhttps://github.com/practicalli/clojure-deps-edn user-level alias for a wide range of community tools for Clojure CLI (deps.edn) projects
• updated libraries in aliases to latest versions using antq (see Changelog for exact details)
• added cljstyle check as a GitHub action using setup-clojure GitHub action, added a .cljstyle configuration that matches cljfmt
• formatted deps.edn with cljstyle changes
https://github.com/practicalli/clojure-deps-edn#2022-09-0721:40HuahaiDatalevin 0.6.17 is released. This release added a function to simulate a Datalog transaction without persisting the changes; added support for big integer and big decimal numbers in both key-value and Datalog API; improved documentation to support cljdoc build. Thanks to contributors @TheExGenesis and @lee https://github.com/juji-io/datalevin#2022-09-0805:43Cam SaulMethodical 0.13.2 is out! Methodical is a multimethod library that acts like a drop-in replacement for defmulti and defmethod, written entirely in Clojure. It supports building multimethods programatically in a nondestructive/functional manner; methods with "partial-default" dispatch values like [:some-keyword :default]; CLOS-style :before, :after, and :around aux methods, and method combinations; easy next-method invocation; and ships with helpful debugging tools.
0.13.2 is a small bugfix release that fixes issues with nil dispatch values.
https://github.com/camsaul/methodical#2022-09-0813:00Noah Bogartthis library is so friggin cool#2022-09-0812:42borkdudehttps://github.com/clj-kondo/clj-kondo, static analyzer and linter for Clojure code that sparks joy
2022.09.08
• :config-in-call - see https://github.com/clj-kondo/clj-kondo/blob/master/doc/config.md#config-in-call
• https://github.com/clj-kondo/clj-kondo/issues/1127: :config-in-tag - see https://github.com/clj-kondo/clj-kondo/blob/master/doc/config.md#config-in-tag
• https://github.com/clj-kondo/clj-kondo/issues/1791: Fix issue with namespace-name-mismatch on namespaces with + sign (and others)
• https://github.com/clj-kondo/clj-kondo/issues/1782: Fix issue with jar URI missreporting to file-analyzed-fn, bump babashka/fs to 0.1.11
• https://github.com/clj-kondo/clj-kondo/issues/1780: Can not use NPM dependency namespaces beginning with "@" in consistent-linter alias
• https://github.com/clj-kondo/clj-kondo/issues/1771: don't crash on empty ns clauses: (require '[]) and (import '())
• https://github.com/clj-kondo/clj-kondo/issues/1774: Add support for sourcehut inferred git dep urls for the Clojure CLI
• https://github.com/clj-kondo/clj-kondo/issues/1768: Expose a tag function in clj-kondo.hooks-api
• https://github.com/clj-kondo/clj-kondo/issues/1790: Add support for :filename-pattern in :ns-group
• https://github.com/clj-kondo/clj-kondo/issues/1773: false positive type mismatch warning with hook
• https://github.com/clj-kondo/clj-kondo/issues/1779: lazy-seq should be coerced a list node
• https://github.com/clj-kondo/clj-kondo/issues/1764: store overrides in cache and don't run them at runtime
Channel: #clj-kondo#2022-09-0812:57borkdudeCarve: carve out the essentials of your Clojure app
Carve will search through your code for unused vars and will remove them.
v0.2.0: misc. fixes and clj-kondo upgrade
https://github.com/borkdude/carve#2022-09-0817:33ambrosebsArticle: A Significant clojure.test Enhancement
https://blog.ambrosebs.com/2022/09/08/clojure-test-uncaught.html
Project announcement: Calling for early testers and feedback for a clojure.test enhancement:
https://frenchy64.github.io/fully-satisfies/latest/io.github.frenchy64.fully-satisfies.uncaught-testing-contexts.html
Dependency info: https://github.com/frenchy64/fully-satisfies#dependency#2022-09-0819:32Alex Miller (Clojure team)I have no memory of this ticket :) but interested in seeing a proposal!#2022-09-0819:33Alex Miller (Clojure team)Oh, this came from someone else, that's why I don't remember it, just forwarded it along#2022-09-0821:17ambrosebs@U064X3EF3 Well, it was fun speculating about how you might have come about it anyway 🙂#2022-09-0821:27Alex Miller (Clojure team)I do have a vaguely related clojure.test ticket that I did file though#2022-09-0821:28Alex Miller (Clojure team)https://clojure.atlassian.net/browse/CLJ-2639#2022-09-0821:28Alex Miller (Clojure team)vaguely related in that it's about getting better feedback on exceptions from tests#2022-09-2605:01ambrosebs@U064X3EF3 attached a proposal to https://clojure.atlassian.net/browse/CLJ-2525#2022-09-0818:41chrisnIntroducing https://github.com/cnuernber/ham-fisted - A high performance core Clojure research project.
For those of you who aren't https://www.reddit.com/r/Clojure/comments/x8hn49/hamfisted_a_new_high_performance_clojure_library/, I have released a project which provides some high performance base Clojure datastructures such as persistent maps and persistent vectors as well as some higher performance base primtiives such as frequencies and group-by. I focus on many things and the library has a lot of ideas, some good and some that didn't pan out, and some public benchmarks. My hope is this becomes a community driven project to improve the platform we are all standing on.
Take a moment to check it out and take it for a test drive. I am always open to issues and PRs and honestly this morning seeing two issues - which means people are actually working with the code - made my day. So don't hesitate to tell me what you really think 🙂.
Enjoy!#2022-09-0819:17Darrick WiebeHow does this compare to the data structures in https://github.com/lacuna/bifurcan?#2022-09-0819:33chrisnThey are definitely comparable - it would be interesting to profile them against each other.
Aside from performance (which if Bifurcan has any major advantages we should usurp them) I would say the ham-fisted datastructures implement all the Clojure interfaces - Indexed, IPersistentVector, IEditableCollection, etc. You can see this with a quick scan of the java source code or the api implementation. So a mutable ham-fisted map is a bitmap trie but it implements IEditableCollection so you can use the transient functions, assoc! and friends and persistent! works. ham-fisted aims to be drop-in compatible with Clojure's existing pathways.
Furthermore there is a lot in ham-fisted aside from datastructures - as I note in the reddit post and the README there are a lot of algorithmic primitives that either perform better, such as group-by, or that plain don't exist and/or perform much better such as update-values and group-by-reduce.
Finally there are Clojure-friendly wrappers for all the java primitive array types so you can pass a primitive array backed data to the rest of your Clojure program and nth, reduce and friends all work correctly and perform much better. There are type-specific implementations of sort and sort-indirect provided for ints, longs, and doubles that perform much better than the generic java sort pathways.
So I would say overall two things aside from performance which both libraries focus on. First - it is drop-in replacement for many core Clojure datastructures and functions and second there are new primitives to the core clojure functions that I think are interesting/worth researching further.#2022-09-0819:35chrisnWell, and another thing there is a lazy-noncaching namespace which provides drop-in replacements of map, filter, and concat which perform better than eduction in some pathways and don't require you to rewire your code from pure clojure.core to transducer form and which in map's case also preserve the random-access property of the input if all the inputs are themselves random-access.#2022-09-0820:28borkdude@UDRJMEFSN
> there is a lazy-noncaching namespace which provides drop-in replacements of map, filter, and concat which perform better than eduction in some pathways and don't require you to rewire your code from pure clojure.core to transducer form
That's really interesting! @U4YGF4NGM and I have been doing a similar thing in #clavascript which is a CLJS syntax to JS compiler which implements some CLJS-esque things directly in JS (but most of the things work directly with mutable data structures, so no CLJS data structures). The implementation there is based on generators. Properties of lazy values returned from map, filter, range, etc are that they are not cached and not chunked, so consuming the value twice will make calculations happen twice, but otherwise they should behave pretty much identical to CLJ(S).
You can play around with that here:
https://clavascript.github.io/clavascript/
ham-fisted seems like a really interesting lib: I guess the idea is that you can use many things as drop-in replacements with clojure.core and it should all mix and match without rewriting your code, but get better performance... right?#2022-09-0820:40chrisnYou are exactly right about lazy-noncached. I think that is a more error prone programming model overall but the performance benefits can be substantial as long as you respect the sharp edges.
Drop-in - well that is the theory:-). - I am working on this on far less than part time so ymmv. You will get better performance if you move further towards the library and use some of the primitives in it - update-values, union, etc are much faster if you are using datastructures from the library and if you know you are dealing with doubles sort is much faster if you pass in a double array - also true for int and longs. In some respects it is also a far simpler bridge into dtype-next land and something I intend to integrate into dtype next as a substrate.
I think overall I want a community platform where we can try out different datastructures and algorithmic primitives in a testable way to move the language forward. I think there is room to improve both clojure.core and the persistent datastructures but I don't think the core language is the place to do it until we are damn sure we are ahead and not causing regressions.#2022-09-0820:43chrisnSpeaking of JS - there is probably room for this type of experimentation in CLJS meaning I think a very careful examination of the datastructures and algorithms that underly the CLJS system would yield substantial benefits but I have no proof of this -- it is just a suspicion.#2022-09-0820:57borkdudeYes and since they are built on protocols, it should be fairly similar to what you did I guess#2022-09-0900:23johnYeah, I'd be interested in helping out with a cljs port of this#2022-09-0916:06henrikRather than a port, I would love a CLJC, even if the CLJS part just contains scaffolding to begin with, subcontracting to cljs.core (where semantically equivalent, of course). This would provide an additional layer of generality as well as a baseline to test against.#2022-09-0916:09chrisnMy thought would be that you would need to write very directly to the js substrate and you would lose performance with cljs or cljc. This may not be true but that is my experience from clj/java - some pieces really do need to be written in Java.#2022-09-0916:10chrisnSo you would have a js library of datastructures and a cljs wrapper. Again, there is an assumption here but if you are going to absolute top performance you need to make sure the cljs->js translation is perfect for that use case and I don't know that it is.#2022-09-0916:10henrikI'm sure, but would that change the surface verbs: group-by-reduce, etc.?#2022-09-0916:11chrisnOh no it wouldn't. I see what you mean now.#2022-09-0916:13henrikThe key would be to go CLJC at the level where there's semantic equivalency. At that level, test suite should be reusable for both even.#2022-09-0916:14chrisnYes- speaking of test suite - I could use help there.#2022-09-0916:17borkdudeRewriting the core data structures and core functions in JS would have tree-shaking benefits with #cherry too - currently we're trying to figure out how to make the Google Closure output tree-shakable but it's very hard#2022-09-0916:18henrikMaybe it's possible to plain steal some parts from the Clojure test suite where applicable.
https://github.com/clojure/clojure/blob/master/test/clojure/test_clojure/vectors.clj#2022-09-0916:18borkdudeThe idea is to have a once-optimized compiled version of CLJS core which we can then re-use to build upon, so you can continue tree-shaking with esbuild#2022-09-0916:19chrisnThe vectors test suite is a great start.
I thought the google clojure compiler did the tree shaking.#2022-09-0916:20johnI'd like to see a persistent data structure lib that can read and write to wasm memory, such that one day when the JVM runs on WASM, we can synchronously bang on the same structure from both CLJ and CLJS#2022-09-0916:20borkdude@UDRJMEFSN google closure does whole-program optimization, but the output isn't compatible with es6 treeshakers, so you can't re-use that beyond the context of an application#2022-09-0916:21chrisngot it.#2022-09-0916:24borkdudeDon't know if you're aware but recently I found this approach to immutability in JS:
https://github.com/immerjs/immer#2022-09-0916:24borkdudeTheir objects are 100% compatible with JS interop, so you don't have to do conversions which are often expensive.#2022-09-0916:25borkdudeMore on their performance: https://immerjs.github.io/immer/performance/#2022-09-0916:25borkdudeThey "freeze" their objects in development, to protect you from accidentally mutating, but they elide that in production#2022-09-0916:28chrisnThey use a sort of transactional model with copy-on-write within the transaction. Once copied within a transaction there is no need to copy further. That is a sort of interesting twist similar to transients.#2022-09-0907:45Cam SaulMethodical 0.14.0 is out.
https://github.com/camsaul/methodical/releases/tag/0.14.0
Methodical is a multimethod library that acts like a drop-in replacement for defmulti and defmethod, written entirely in Clojure. It supports building multimethods programatically in a nondestructive/functional manner; methods with "partial-default" dispatch values like [:some-keyword :default]; CLOS-style :before, :after, and :around aux methods, and method combinations; easy next-method invocation; and ships with helpful debugging tools.
Methodical 0.14.0 introduces several major improvements, including:
• Bundled clj-kondo config now triggers errors when you're calling next-method with the wrong number of args
• Added describe facility to generate Markdown-formatted documentation about a multimethod and all of its method implementations. Adding or removing methods automatically updates the docstring for a multimethod and adds this extra information.
• Methodical defmulti s now support a :dispatch-value-spec that will be used to validate the dispatch value form in defmethod s at macroexpansion time
• Methodical multimethods now implement datafy
• You can now add docstrings to defmethod forms; this documentation is automatically added to the multimethod and included in describe output
• More syntax errors to defmethod and defmulti are caught at macroexpansion time#2022-09-1208:55ingesolI would really love for this to support CLJS, but I totally understand that you are not motivated to work on something you don’t personally need.#2022-09-0912:41plexusWe've released the first alpha of lambdaisland/launchpad, a Clojure/nREPL dev process launcher https://github.com/lambdaisland/launchpad
Launchpad is mainly created with multi-module (monorepo or multi-repo) projects in mind. It integrates with lambdaisland/classpath to provide hot reloading of deps.edn for any of the referenced projects.#2022-09-0912:59borkdudeLooks like it could be interesting to add #babashka-bbin support to launchpad
https://github.com/babashka/bbin#2022-09-0912:59borkdudecc @U0CLCL6T0#2022-09-1016:15radsThanks for the heads up. Looks like a cool project#2022-09-0912:54borkdudeA new version of #nbb: Scripting in Clojure on Node.js using SCI
Run npx nbb to get a Clojure REPL anywhere Node.js is installed! 🎉
The last announced version here was 0.6.122. We're at 0.7.133 now.
Major new features:
• Support :deps in nbb.edn - thanks https://github.com/lilactown!
• Malli compatibility
• https://github.com/babashka/nbb/issues/247: Include all remaining goog.object functions
• https://github.com/babashka/nbb/issues/252: IPrintWithWriter support
Many other bugfixes, https://github.com/babashka/nbb/blob/main/CHANGELOG.md
Channel: #nbb
Repo: https://github.com/babashka/nbb#2022-09-0913:17pezWill these wonderful things be straightforward to add to #joyride as well?#2022-09-0913:31borkdude@U0ETXRFEW yes!#2022-09-0922:04uochanJust released vim-iced ver 3.12.3144, Clojure Interactive Development Environment for Vim8/Neovim.
https://twitter.com/uochan/status/1568359300577521664#2022-09-1022:05ambrosebsAnnouncing two new takes on old functions: https://frenchy64.github.io/fully-satisfies/latest/io.github.frenchy64.fully-satisfies.somef.html#var-somef and https://frenchy64.github.io/fully-satisfies/latest/io.github.frenchy64.fully-satisfies.everyp.html#var-everyp.
Dependency information: https://github.com/frenchy64/fully-satisfies#dependency
I wrote a brief history of some-fn and every-pred that helps explain and
motivate these functions, and leaves you with some brain teasers: https://blog.ambrosebs.com/2022/09/10/unrolling-some-fn-every-pred.html#2022-09-1022:12Ben SlessAdding another question to the post:
Could find a way to not unroll it manually?
Is there a combinator for that?#2022-09-1023:01ambrosebsThanks yes, Rich Hickey proposed that question 10 years ago in the same post https://groups.google.com/g/clojure-dev/c/iZNJxqm1JuA/m/35kjl_1F2xUJ#2022-09-1023:27Noah BogartYou’re on a roll with these posts#2022-09-1105:13Ben Sless@U055XFK8V I actually contributed something close to malli
https://github.com/metosin/malli/blob/master/src/malli/impl/util.cljc#L50#2022-09-1113:51ambrosebs@UK0810AQ2 brilliant!#2022-09-1113:57ambrosebslooks like you need the base case configurable: this should be false in Clojure:
((-some-pred [])) ;=> true
#2022-09-1116:58Ben Slesswhat I'd give for a multi-pass inlining compiler#2022-09-1118:28Noah Bogart> The proposal to fix this was rejected, so we’re left without a neat end to this story.
Bummer.#2022-09-1101:08ambrosebsAnnouncing https://frenchy64.github.io/fully-satisfies/latest/io.github.frenchy64.fully-satisfies.clearing-future.html#var-clearing-future, an implementation of Clojure Futures that https://clojure.atlassian.net/browse/CLJ-2619.
Dependency information: https://github.com/frenchy64/fully-satisfies#dependency
Blog post: https://blog.ambrosebs.com/2022/09/11/futures-memory-leak.html#2022-09-1213:52eggsyntaxThanks for the tons of interesting writing and releases in the past week or so!#2022-09-1214:31ambrosebsthanks @U077BEWNQ, appreciated!#2022-09-1214:44dchelimsky[ANN] Cognitect Labs’ aws-api 0.8.589 https://groups.google.com/g/clojure/c/4IcauQMQHz4/m/XECSnPdoDAAJ#2022-09-1308:34slipsethttps://clojars.org/clj-commons/clj-yaml is released at version 0.7.110 with a bump of snake-yaml to 1.32 in order to avoid a CVE on that dep. Thanks to @danielcompton for the PR!#2022-09-1511:06borkdudeSCI, Configurable Clojure interpreter suitable for scripting and Clojure DSLs
SCI is used in #babashka, #nbb, #clerk viewer functions, #clj-kondo hooks, #joyride, and many more projects.
v0.4.33:
The full changelog can be found https://github.com/babashka/sci/blob/master/CHANGELOG.md#v0433
This release contains a lot of improvements and bug fixes, mostly in the area of error reporting.
Channel: #sci#2022-09-1516:44radsbbin: Install any Babashka script or project with one command
Intro Post: https://radsmith.com/bbin
GitHub: https://github.com/babashka/bbin
Slack: #babashka-bbin
Reddit: https://www.reddit.com/r/Clojure/comments/xf1i4m/bbin_install_any_babashka_script_or_project_with/
Today I'm excited to share bbin, a tool that makes it easy to install Babashka scripts and projects on your system PATH.
Even though the project is just getting started, it's already very useful! Check out the https://github.com/babashka/bbin/wiki/Scripts-and-Projects page for examples of tools that you can already install out-of-the-box#2022-09-1517:26Eugenlooks awsome, I will try it out when I get some time#2022-09-1606:01plexusWe cut a first release of lambdaisland/nrepl-proxy, an nREPL introspection and debugging tool. It sits in between an nREPL client and server and prints out the messages that are going back and forth. https://github.com/lambdaisland/nrepl-proxy#2022-09-1606:01plexusExample output:
nil ---> 1 clone {}
J <=== 1 #{:done} {:new-session "002914a8-db79-408d-807a-c5b3955ab6f9"}
nil ---> 2 clone {}
X <=== 2 #{:done} {:new-session "6a7e7b99-1b8e-4008-bbe5-ddddf46672a9"}
Y ---> 3 describe {}
Y <=== 3 #{:done} {:aux {:current-ns "user"}, :ops {:stdin {}, :add-middleware {}, :lookup {}, :swap-middleware {}, :sideloader-start {}, :ls-middleware {}, :close {}, :sideloader-provide {}, :load-file {}, :ls-sessions {}, :clone {}, :describe {}, :interrupt {}, :completions {}, :eval {}}, :versions {:clojure {:incremental 3, :major 1, :minor 10, :version-string "1.10.3"}, :java {:version-string "17"}, :nrepl {:incremental 0, :major 0, :minor 9, :version-string "0.9.0"}}}
Y ---> 4 eval {:nrepl.middleware.print/buffer-size 4096, :file "*cider-repl lambdaisland/nrepl-proxy:localhost:5424(clj)*", :nrepl.middleware.print/quota 1048576, :nrepl.middleware.print/print "cider.nrepl.pprint/pprint", :column 1, :line 10, :code "(clojure.core/apply clojure.core/require clojure.main/repl-requires)", :inhibit-cider-middleware "true", :nrepl.middleware.print/stream? "1", :nrepl.middleware.print/options {:right-margin 80}}
G ---> 5 eval {:code "(seq (.split (System/getProperty \"java.class.path\") \":\"))"}
Y <--- 4 #{:nrepl.middleware.print/error} #:nrepl.middleware.print{:error "Couldn't resolve print-var cider.nrepl.pprint/pprint"}
Y <--- 4 #{} {:value "nil"}
Y <--- 4 #{} {:ns "user"}
Y <=== 4 #{:done} {}
#2022-09-1606:57pezOMG. Yesterday I asked on the REPL-y repository if I could have a log like this from it. https://github.com/trptcolin/reply/issues/210 IIuc, you just solved it, in the most elegant and composable way. Thanks! 🙏 ❤️#2022-09-1607:23robert-stuttafordbeautiful!#2022-09-1607:25plexusIt's been around for a year, @U051BLM8F just had to poke me to put out a release.#2022-09-1608:22borkdude@U07FP7QJ0 This is very useful for reverse engineering the nREPL protocol or rather, implementations thereof -- thank you!#2022-09-1608:39bozhidarI've also mentioned nrepl-proxy on the nREPL site, so that people would find it easier https://nrepl.org/nrepl/building_clients.html#debugging-the-communication-with-nrepl#2022-09-1608:40borkdudeThe deployed jar file doesn't contain any .clj files:
$ ls_jar.clj /Users/borkdude/.m2/repository/com/lambdaisland/nrepl-proxy/0.1.4-alpha/nrepl-proxy-0.1.4-alpha.jar
META-INF/MANIFEST.MF
META-INF/
META-INF/maven/
META-INF/maven/com.lambdaisland/
META-INF/maven/com.lambdaisland/nrepl-proxy/
META-INF/maven/com.lambdaisland/nrepl-proxy/pom.xml
META-INF/maven/com.lambdaisland/nrepl-proxy/pom.properties
#2022-09-1608:46borkdude@U07FP7QJ0 hence, I can't use it ;)#2022-09-1608:46borkdudeof course I could just use it as a git dep#2022-09-1609:02plexushmmm let me see#2022-09-1609:05plexusa bug in our lambdaisland/open-source release tooling. How can it be! https://github.com/lambdaisland/open-source/pull/11#2022-09-1609:06borkdudeIt happens :)#2022-09-1609:08plexusok, looks better#2022-09-1609:10borkdude(https://twitter.com/borkdude/status/1570701560216424449)#2022-09-1609:10borkdudeI'll try, thanks plexus#2022-09-1609:16borkdudeNow made a bb script which wraps nrepl proxy and you can install it using bbin:
https://github.com/borkdude/tools#nrepl_proxy
bbin install
#2022-09-1609:20plexusoh excellent, I had not expected it to be babashka compatible#2022-09-1609:22borkdudeit isn't#2022-09-1609:22borkdudethis is just a CLI wrapper which executes clojure#2022-09-1609:22plexusah I see#2022-09-1609:24pezAwesome, @U04V15CAJ! As I just had a need to see the logs when using REPL-y, I think ”your editor” is a bit limiting in the usage string. But maybe it is still less mysterious than ”your nREPL client”...#2022-09-1609:30borkdude@U0ETXRFEW updated#2022-09-1610:56pezThere's a new #calva version in town. Rather a lot of changes since un update was last announced. Here's the latest: https://github.com/BetterThanTomorrow/calva/releases/tag/v2.0.301
• Fix test running issue: https://github.com/BetterThanTomorrow/calva/issues/1821
• https://github.com/BetterThanTomorrow/calva/issues/1843
For users of #joyride (and VS Code extension developers): This Calva build also has some new API.
• There's an calva/editor.replace. function that will replace a range in a document with the new text you provide. See https://calva.io/api/#editor.
• A calva/pprint.prettyPrint function will take a string with Clojure code/data and return a string with a prettier version of the same code. See https://calva.io/api/#pprint.
#2022-09-1614:04Daniel JomphePersonally I fail to understand what is new for the end-user about formatting.
We could already TAB before a form and have it reformatted.
Is it just that we can, with this, use a different tool behind the scenes to reformat some selections/forms?#2022-09-1614:19pezThanks for asking this! It is subtle until you have the use case. 😃 In the issue linked above (all Calva Changelog items link to issues with the problem statement) there is a link to a question on Clojure Ask: https://ask.clojure.org/index.php/12126/there-way-place-elements-collection-vertically-with-calva It's about that the Calva formatter won't turn this:
[[1 2 3] [4 5 6] [7 8 9]]
Into this:
[[1 2 3]
[4 5 6]
[7 8 9]]
This is by design, but we still sometimes have the need to do this kind of formatting. That is what this new command does. (If your pretty printer settings are configured to break lines that short.) It's just a first version of the feature, it might turn a bit more versatile going forward.
Does this answer your question?#2022-09-1614:20pezI should have narrated the screencast... 😃#2022-09-1614:41Daniel JompheOh, I see, so this lays the ground work so we could e.g. cycle through different config sets for reformatting stuff differently.
Let me then say: neat! :star-struck: 🙏:skin-tone-3:
Thanks for this and the explanation!#2022-09-1911:47Jakub Holý (HolyJak)awesome, I was missing formatting of data for a long time...#2022-09-1913:12pezCool! The key here is static formatting of data. We've been able to do it with the REPL all this time, but that isn't always a feasible option.#2022-09-1614:20Felipe ReigosaHey guys, MockMechanics (the sandbox mechanical building game/visual programming language) is now officially open source. It's written and scripted (optionally) in clojure. There is a visual way to program the things you build but using clojure as an scripting language is also an option, so you could build a robot hand like the one in the video (it's very easy, kind of building it with lego) and then use clojure to make it pick up objects and so on.
https://github.com/felipereigosa/mock-mechanics
There's also the channel where I post the things I build (and if you build something send it to me and I will consider adding it there).
https://www.youtube.com/c/MockMechanics#2022-09-1614:22eggsyntaxThanks for open sourcing it! I remember thinking it was really cool when you first posted about it, and it looks even cooler now! 🎉#2022-09-1614:28Felipe Reigosa@U077BEWNQ Thanks :)#2022-09-1614:33pezThanks for open sourcing this, @U01JSRSH4V7! It is an amazing and generous gift!#2022-09-1614:37Felipe ReigosaNo problem @U0ETXRFEW :)#2022-09-1614:47refsetThis is the best advert for Clojure I've ever seen 👏 (the vibe, if not the language itself)#2022-09-1615:42robert-stuttafordi love this community. people are doing SUCH COOL SHIT!#2022-09-1618:08Felipe Reigosa@U899JBRPF @U0509NKGK Thanks guys!#2022-09-2218:52AkizThis is probably the coolest Clojure project I have ever seen. KUDOS#2022-09-2219:31Felipe ReigosaThanks @UBRV1HXPD, you are too kind.#2022-09-2219:43pezAre the call for papers for the next Conj closed? I would just love to see you present this project and the ideas behind it.#2022-09-2221:41Felipe Reigosa@U0ETXRFEW Really? Thanks. Someone else asked me just the other day about the experience and history behind the project. I'm not sure if I would like to present it though, we'll see, if someone invites me to speak at something I'll think about it.#2022-09-2304:41pezHere’s hoping someone invites you to speak!#2022-09-1614:37borkdudeQuickdoc: Quick and minimal API doc generation for Clojure
v0.1.1
• https://github.com/borkdude/quickdoc/issues/14: Skip vars defined in comments
• https://github.com/borkdude/quickdoc/issues/18: Quickdoc ignores arglists metadata
• https://github.com/borkdude/quickdoc/issues/17: Change toc var descriptions to be the first sentence of their doc
https://github.com/borkdude/quickdoc
Channel: #quickdoc#2022-09-1718:23eggsyntaxNice! Thanks 🙂#2022-09-1918:33metasoarousThis is great! But would it be possible to have the source inline in a <details> tag? I'd find that more convenient than having to hit github.#2022-09-1918:35borkdudeI think it could be done, but the source has to be extracted manually. Here is a snippet for that:
https://github.com/clj-kondo/clj-kondo/wiki/Analysis-tips-and-tricks#getting-the-source-for-usage-of-a-var
I'm open to a PR for this#2022-09-1703:45ambrosebsTyped Clojure 1.0.32
Adds type-level map merging, like spec's s/merge or malli's :merge except lifts clojure.core/merge's type checking semantics to type level.
(t/Merge '{:a t/Int} '{:b t/Int}) => '{:a t/Int :b t/Int}
(t/Merge '{:a t/Int} '{:a t/Bool}) => '{:a t/Bool}
Thanks to @ciccio for the suggestion.
https://www.patreon.com/posts/72093965
https://github.com/typedclojure/typedclojure/blob/main/CHANGELOG.md#1032-20220917
Channel: #core-typed#2022-09-1819:12Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.11.1.1165:
• https://clojure.atlassian.net/browse/TDEPS-165 Adds new CLJ_JVM_OPTS env var that can be used to set jvm opts on the internal processes that build classpaths
• Adds support for the common JAVA_OPTS for setting jvm opts on user programs#2022-09-1819:36borkdudeAlso released a new deps.clj:
https://github.com/borkdude/deps.clj/blob/master/CHANGELOG.md#changelog#2022-09-1823:05uochanJust released antq ver 2.1.920 Tool to point out your outdated dependencies.
https://github.com/liquidz/antq
Added support for link to changelogs :)#2022-09-1907:03plexusWe released Kaocha 1.70.1086, containing a few bug fixes. This is the 10th Kaocha release this year.#2022-09-1907:03plexusDetails as always in the CHANGELOG https://github.com/lambdaisland/kaocha/blob/main/CHANGELOG.md#2022-09-1908:16plexusNote that in this release we've switched from deep-diff to deep-diff2, and this can cause issues for other projects assuming that kaocha pulls in deep-diff. I'm upgrading kaocha-cljs now, we'll also have to make a new release of kaocha-cljs2. In the meanwhile adding an explicit dependency on deep-diff might help.#2022-09-1908:19plexus[com.lambdaisland/kaocha-cljs "1.3.127"]
{com.lambdaisland/kaocha-cljs {:mvn/version "1.3.127"}}#2022-09-1911:27dchelimskyCognitect Labs’ aws-api https://groups.google.com/u/2/g/clojure/c/H38WznsIKu0
• upgrade to org.clojure/data.xml 0.2.0-alpha8. Fixes https://github.com/cognitect-labs/aws-api/issues/205#2022-09-2010:07borkdudeProcess 0.1.3-0.1.8:
Clojure library for shelling out / spawning subprocesses
Repo: https://github.com/babashka/process
Channel: #babashka
• https://github.com/babashka/process/issues/84: fix tokenize with single-quoted strings inside double-quoted string
• https://github.com/babashka/process/issues/76: error while loading babashka.process with older GraalVM libraries
• https://github.com/babashka/process/issues/72: exec arg0 should be the program name by default
• https://github.com/babashka/process/issues/73: support for Clojure 1.9
• Add shell function that behaves similar to babashka.tasks/shell
• Support string as value for :out and :err for writing to file#2022-09-2103:19quollClormat 0.0.1
A clean reimplementation of
Repo: https://github.com/quoll/clormat
This covers some of the basic functionality of the format function, specifically for ClojureScript. It's an initial release, covering positional parameters, along with several of the datatypes and flags. Significantly, it is still missing floating point formats and date/times, but these are in progress.
The function aims for clojure.core/format compatibility wherever possible.#2022-09-2104:10Cora (she/her)so cool!!#2022-09-2104:13quollIt's ridiculously finicky#2022-09-2104:20quollLike, what should this return?
(format “%,(010d” -101)
I thought maybe ”(000,101)” because it can't be ”(,000,101)” but it turns out that prefixing zeros don't get grouped, even though the NumberFormat classes on both Java and JavaScript DO group prefixing zeros#2022-09-2104:22Cora (she/her)matching behavior like this is so hard. thanks for doing it 💜#2022-09-2104:22quollOr… how should -1 be represented in hex? It can't be 64 bits wide because integers on JavaScript are only 52 bits wide#2022-09-2104:23Cora (she/her)oh god I didn't even think of that#2022-09-2104:23quollI did say “ridiculously finicky”#2022-09-2104:24Cora (she/her)an understatement, I'm sure#2022-09-2104:24Cora (she/her)if anyone can figure it out, though, it's you#2022-09-2104:26quollOne thing I haven't put a lot of effort into though is incompatible flag combinations #2022-09-2104:26Cora (she/her)how do you mean?#2022-09-2104:29quollFor instance, ”%-010d” says to print a number at least 10 characters wide, left-justified, with leading zeros to make up the width. But if it's left-justified then there can't be any leading zeros#2022-09-2104:30quollIf there are leading zeros then it will take up the whole width and left/right justification won't matter#2022-09-2104:31quollYou know… that kind of thing 🙃#2022-09-2104:32quollOn the plus side, I know much more about formatting text strings than ever before!#2022-09-2104:34Cora (she/her)this just in: found the text formatting goddess#2022-09-2104:34Cora (she/her)I get paralyzed with those kinds of choices tbh#2022-09-2104:35Cora (she/her)and in the end devs need to be aware of at least some of it#2022-09-2104:35Cora (she/her)write once, run anywhere: a god damn lie from the start#2022-09-2107:44Lennart BuitProgramming in a nutshell: You are walking down the street only to fall in a little pothole that ends up being 3km deep and require a thorough study of spelunking to get out again.#2022-09-2109:46pez> An implementation of the cljs.core/format function for ClojureScript. Also runs (redundantly) in Clojure.
Not sure how I should read this. Should it say an implementation of the clojure.core/format function?#2022-09-2110:07quollWell it's trying to be an implementation of the missing cljs.core/format function #2022-09-2110:23pezThat's awesome. Maybe say that in the README? 😃#2022-09-2110:26pezAlso, is clormat a play with the name of cljs.pprint/cl-format?#2022-09-2111:29Noah BogartAre you trying to do this without reading the openjdk source?#2022-09-2112:07quollYes, I am 🙂#2022-09-2112:08quollThe name was probably informed by the existence of cl-format, but I was just thinking “CLojure fORMAT”#2022-09-2112:17Noah BogartThat’s cool and a much harder task lol. Makes sense for licensing reasons if you want to upstream it; you’re a champ for doing this#2022-09-2616:42bherrmannfinicky looks like fn-hickey (aka function by Rich Hickey)#2022-09-2616:44quollYes… very finicky.
I’ve been exploring more, and I now have more info to make it better for localization (correcting expanding with zeros, etc)#2022-09-2616:45quollEvery allowable zero: 0٠༠০०۰၀๐᱐#2022-09-2616:45quollDepending on the country and language setting#2022-09-2616:53pezIs it supposed to format numbers and things according to locale? If so I could have a look at the Swedish.#2022-09-2616:54quollIt’s defined to work against the current default locale, which I have yet to figure out how to set during testing 🙂#2022-09-2616:54quollThere are relatively consistent rules to follow regardless of locale, but not all of it is apparent#2022-09-2616:56quollExpand with 0s varies according to the number system in use (see the earlier message). Group separators are an issue as well, since they also vary with the numbering system#2022-09-2616:56quollSomewhat ironically, Arabic does not use the numbers we call “arabic” 🙂#2022-09-2616:57quollFor instance, the number 1234 in one form of arabic is: ١٬٢٣٤#2022-09-2616:58quollThe second character is the group separator. European countries are easy enough for me: UK: “1,234”, FR: “1 234", GE: “1.234”#2022-09-2617:00Lennart BuitAlthough the Dutch uses comma for decimals, and dot for thousands. Exactly opposite of Americans. This has never lead to input confusion for me-as-a-Dutchie #2022-09-2617:12quollThese things are easy, since the digits are all the same#2022-09-2617:16quollHere are all the possible outcome for (format "%,d" 1234):
"1,234"
"1.234"
"1234"
"1 234"
"1’234"
"١٬٢٣٤"
"۱٬۲۳۴"
"१,२३४"
"১,২৩৪"
"๑,๒๓๔"
"༡,༢༣༤"
"၁,၂၃၄"
#2022-09-2617:26quollExtra notes:
• clojure.core/format wraps java.lang.String/format which does not accept a locale. This means that it always select the current default, and you cannot control it on this function.
• You can control it on the JVM, via: (String/format (Locale/forLanguageTag "sv") "%,d" (object-array [1234]))
• You can do the same on JS via: (.format (js/Intl.NumberFormat. "sv" #js{:grouping: true}) 1234)
• This is for the trivial case of a pattern of "%,d". More detailed cases cannot be formatted via the locale settings, and require manual intervention. For instance, when using "%,010d" then using locale formatting to ask for 10 digits in the UK will give an output of: "0,000,001,234". However, the format function actually outputs: "000001,234". Note how the localization groups the zeros, but the format does not?#2022-09-2617:31quollI’m just scratching the surface here#2022-09-2617:32quollIt gets hairier 🙂#2022-09-2107:47Ivar Refsdalclj-paginate 0.2.52
Fast pagination of vectors and maps with Clojure for GraphQL. Easily handles vectors with 10M entries.
Repo: https://github.com/ivarref/clj-paginate
This release adds support for :sort-fn and with that custom ordering (ascending/descending) of attributes.
https://github.com/ivarref/clj-paginate#descending-values-example.
It's backwards compatible with the previous release.#2022-09-2112:37jpmonettas[ANN] FlowStorm Clojure[Script] debugger 3.0 is out
FlowStorm is a Clojure and ClojureScript debugger with some unique features.
Version 3.0 has been redesigned to be much simpler and more extensible. It goes from being a debugger to being a platform for building debuggers + a reference implementation.
Most remarkable new features for this version are :
• ClojureScript is feature par with Clojure now, so every feature is available to both languages.
• Remote debugging can be accomplished by just connecting to a nrepl server (socket repl support on the roadmap)
• A programmable API. This means debug your code by writing Clojure code that uses the debugger infrastructure. See (https://jpmonettas.github.io/flow-storm-debugger/user_guide.html#_programmable_debugging)
• Opens the possibility for future integration with IDEs/editors
Github repo : https://github.com/jpmonettas/flow-storm-debugger/
User Guide https://jpmonettas.github.io/flow-storm-debugger/user_guide.html
Big thanks to Roam Research (https://roamresearch.com/) for sponsoring the project!
If you have any questions please show up on #flow-storm in clojurians slack
PD : I'm planning to make some videos on how to use FlowStorm to debug different kinds of applications (web apis, re-frame SPAs, etc)
I hope you find it useful.
Cheers!#2022-09-2216:29Lidor Cohen👏 👏 👏 Been waiting for this
thank you so much! 🙏#2022-09-2216:34jpmonettasyou are welcome! if you have any questions show up in #flow-storm!#2022-09-2217:33jpmonettasfor people that tried it for ClojureScript and was annoyed by having to reconnect the debugger by hand when reloading a browser page or restarting the shadow repl just released 3.0.188 which does automatic connection management. It also shows the connection status for the repl and the runtime on the bottom right corner#2022-09-2213:29borkdudeGrasp: Grep Clojure code using clojure.spec regexes: v0.1.4
https://github.com/borkdude/grasp#2022-09-2219:05borkdudeBabashka CLI: turn functions into CLIs!: v0.3.33-0.4.37
https://github.com/babashka/cli
• https://github.com/babashka/cli/issues/39: handle :exec-args with false default
• Be tolerant of tags in clojure.basis
• Added :error-fn to handle errors (https://github.com/jmglov)
• Merge :spec options with additional "terse" options
• Added :require to throw on missing options
• Added :validate to throw on invalid options
• Support parse-opts options in dispatch table entries
• Add :args->opts in parse-opts to consume positional arguments as options#2022-09-2303:50ambrosebshttps://github.com/frenchy64/fully-satisfies 1.7.1
• fix every-pred/`some-fn` variants to be operationally equivalent to (every? #(every? % args) preds) and (some #(some % args) fs) as previously advertised (https://blog.ambrosebs.com/2022/09/10/unrolling-some-fn-every-pred.html, https://github.com/frenchy64/fully-satisfies/issues/6)
• improve "Uncaught exception, not in assertion" error message when running tests in parallel (https://blog.ambrosebs.com/2022/09/08/clojure-test-uncaught.html, https://github.com/frenchy64/fully-satisfies/commit/e3ee48926c9105d030e04befdabebe3965b2e999)
https://github.com/frenchy64/fully-satisfies#dependency
https://github.com/frenchy64/fully-satisfies/blob/main/CHANGELOG.md#171---22nd-september-2022#2022-09-2319:58blueberryJust published new draft 0.29.0 of Deep Learning for Programmers 2.0 https://aiprobook.com/deep-learning-for-programmers/?release=0.29.0#2022-09-2321:57jsa-aerialHi Dragan - I've been confused by this before. I don't see a variant of this for the tier 1 subscribers. Is this (dlfp2-draft-0.29.0-2.0) the successor to dlfp-draft-0.26.0 or is there a new one for that variant as well?#2022-09-2916:38blueberry@U06C63VL4 Tier 1 subscribers automatically get all new stuff.#2022-09-2916:44blueberryI've published a post that I hope clarifies this: https://www.patreon.com/posts/72639212?pr=true#2022-09-2916:47blueberry@U06C63VL4 Tier 1 subscribers should see the new versions. Is it is not the case, please contact me to fix this.#2022-09-2920:37jsa-aerial@U086AG324 OK, what I now see is dlfp-1.0.0.pdf, dlfp2-draft-0.30.0-2.0.pdf, and dlfp3-draft-0.30.0-3.0.pdf. Before (when I started this thread) I only was seeing dlfp2-draft-0.29.0-2.0.pdf. Could have been a stale browser page. Even so, I still am confused about this. First, the 1.0.0 (which was released 2-Sep-2021 - over a year ago), has much more stuff in it than the other two (in terms of actual content), but 2-draft-0.30.0-2 and 3-draft-0.30.0-3 both have some extra stuff in the TOC: "VGG: a non-trivial CNN example" and a new chapter "VIII Recurrent networks". Now neither of these has any content for the example nor the new chapter.
So, it looks like 1.0 branch is no longer being updated. And that the 2.0 and 3.0 branches will have the new stuff. But at the moment, there isn't any new stuff - unless the previous chapters and sections that overlap with 1.0 have had updates not in 1.0. I think this is the confusing thing - it looks like all three of these may be needed to get the complete content. If not now, certainly in the (near?) future when the content for VGG example and the RNN chapter is filled in. And maybe for changes, corrections to the previous content is made.#2022-09-2923:00blueberryThe 2.0 and 3.0 versions have smaller changes and fixes and the code is up-do-date with DD 0.25.0. The new chapters are going to be added to this. v1.0.0 is final and there won't be changes added to it.
You of course have access to all this material in v1.0.0 but for v2.0 tiers these are new updates.#2022-09-2409:51Ben Sless[ANN] https://github.com/bsless/datalog-parser.spec https://clojars.org/io.github.bsless/datalog-parser.spec/versions/0.0.4, https://github.com/bsless/datalog-parser.malli https://clojars.org/io.github.bsless/datalog-parser.malli/versions/0.0.6
These libraries implement the query, rule and pull grammars as they appear in the official Datomic documentation, with clojure.spec and malli respectively, and let the user emit fully conformed queries
Ideally, the spec based library would be used as a correct reference point for other parsers, where the malli parser is an example of a high-performance compliant implementation.#2022-09-2423:33ericdalloReleased https://github.com/ericdallo/deps-bin - A Clojure library that generate an embeddable jar executable from a jar to be used from deps.edn.
• This release adds support for Windows thanks to @chaos (@ikappaki)#2022-09-2502:31ambrosebshttps://github.com/dm3/clojure.java-time 1.0.0
New Features
• Previously, Intervals were only allowed to the left of Instants in {before,after}?. Now they can be freely intermixed.
Fixed
• #78(liquidz): Add missing chrono fields (v0.3.3 has breaking changes)
• #81(terop): Remove clj-tuple - no advantages over Clojure vector anymore
• #52: Fix before/after on Intervals
• #83(imrekoszo): Exclude clojure.core/abs
Enhancements
• add docstrings to all java-time fns
• support clj-kondo in java-time ns by adding :arglists to all vars
https://clojars.org/clojure.java-time/versions/1.0.0
https://github.com/dm3/clojure.java-time/blob/master/CHANGELOG.md#100#2022-09-2506:06borkdudeWould you consider introducing a multi segment namespace and deprecating the single namespace one?#2022-09-2506:07borkdudeThe single one makes it harder to use this library with GraalVM native image. See https://github.com/clj-easy/graal-build-timeand specifically this: https://github.com/clj-easy/graal-build-time#single-segment-namespaces#2022-09-2516:17mikerodNo more abs warnings is a beautiful thing. #2022-09-2519:34ambrosebs@U04V15CAJ yes, especially since the single segment ns is auto-generated anyway. java-time.api seems like a good name. Opened https://github.com/dm3/clojure.java-time/issues/91#2022-09-2519:34ambrosebs@U0LK1552A quite a journey, but we've arrived xD#2022-09-2519:41borkdude@U055XFK8V Usually it's best to choose a unique prefix so your lib won't conflict with other libraries in that area. java-time is a bit generic, but it does solve the graalvm problem. Thanks#2022-09-2520:01ambrosebsyes, unfortunately all the implementation is under java-time.* and that cannot be moved (due to public protocols). I probably have to operate on the assumption that this package prefix is unique.#2022-09-2512:51vlaaadI'm happy to announce a first release of #cljfx dev tools — https://github.com/cljfx/dev
https://github.com/cljfx/cljfx is a declarative, functional and extensible wrapper of JavaFX inspired by better parts of react and re-frame. Cljfx dev tools are a set of tools that help with developing cljfx applications but should not be included into the production distribution of the cljfx app.
Many thanks to https://www.clojuriststogether.org/ for funding this work!#2022-09-2816:25AkizDo you have any idea if your great library (cjfx) could somehow be applied to
https://github.com/AlmasB/FXGL ?#2022-09-2610:57borkdudePeriodic reminder that we also have a #releases channel in which minor or more-frequent-than-once-a-month releases are announced!
(This message is not targeted at any specific message that was posted here).#2022-09-2705:19ambrosebsCalling for early testers to try a spec for clojure.core/reify that has been https://clojure.atlassian.net/browse/CLJ-2661.
Dependency: https://github.com/frenchy64/fully-satisfies#dependency https://github.com/frenchy64/fully-satisfies/blob/main/CHANGELOG.md#190---27th-september-2022
Code: Please inject a call to (io.github.frenchy64.fully-satisfies.reify-spec/register-reify-spec) before compiling your project.#2022-09-2906:23CrispinToday a new babashka pod is released: bbssh. ssh and scp support for babashka that interoperates with babashka.process: https://github.com/epiccastle/bbssh#2022-09-2914:29eval2020The new version of the https://gitlab.com/clojurians-zulip/feeds/-/tree/master#announce-an-event makes announcing a https://meetup.com or http://clojureverse.org event a breeze as it now scrapes all event-details for you:
$ zulip_events create --zulip-auth "${ZULIP_AUTH}" --url
These announcements power the Clojure event calender-feed - see https://clojurians.zulipchat.com/#narrow/stream/262224-events/topic/README.
Enjoy!#2022-09-2915:58Daniel SlutskyFantastic, this is so valuable & helpful. 🙏#2022-09-2916:45blueberryJust published new draft 0.30.0 of Deep Learning for Programmers 2.0. All existing v1.0 subscibers also get all these new updates. https://aiprobook.com/deep-learning-for-programmers/?release=0.30.0#2022-09-2919:23borkdudeRewrite-edn: utility lib on top of #rewrite-clj with common operations to update EDN while preserving whitespace and comments.
0.3.4
• https://github.com/borkdude/rewrite-edn/issues/20: Bump rewrite-clj to v1.1.45 (https://github.com/lread)
• https://github.com/borkdude/rewrite-edn/issues/19: Repeated assoc-in, assoc no longer throw NullPointerException (https://github.com/lread)
• Add keys and get-in (https://github.com/witek)
Repo: https://github.com/borkdude/rewrite-edn#2022-09-2922:02lreadclj-http-lite v1.0.13 - A JVM and babashka compatible lite version of clj-http
Highlights from the https://github.com/clj-commons/clj-http-lite/blob/master/CHANGELOG.adoc#v1.0.13:
• The :insecure? option is now applied only to the current request
• If specified, request’s body encoding is now applied, else defaults to UTF-8
• User info from request URL now applied to basic auth
• Nested query and form parameters are now automatically flattened
• Now also automatically verified to work under Windows
• Docs reviewed and updated
clj-http-lite is one of the many projects under the loving care of https://github.com/clj-commons.#2022-09-3009:49borkdudedeps.clj : A faithful port of the clojure CLI bash script to Clojure
v1.11.1.1165 catches up with the same version of the clojure CLI bash script with support for the new CLJ_JVM_OPTS and JAVA_OPTS environment variables.
https://github.com/borkdude/deps.clj/blob/master/CHANGELOG.md#v11111165
deps.clj is used in Calva for the getting started environment and used in #babashkafor fetching dependencies. Since it's available as a jar file (and bb script and binary), you can just download that and run it without having anything else installed to get the same clojure CLI experience, which for some environments can lower the barrier of entry for getting up and running with Clojure!#2022-09-3010:00pezFor the record: Calva will use deps.clj whenever clojure is not installed. So it is not only for the dedicated Getting Started features. Granted, Calva does it this way to cut one step from the Getting Started with Clojure procedure.#2022-09-3012:19lreadThe binary is a great alternative to the clojure Powershell module if you are using (or testing on) Windows native. You can run deps.exe from any Windows shell and escape a layer of confusing command line escaping.#2022-09-3012:21lreadPro tip: if you are using babashka, it is effectively also available via bb clojure.#2022-09-3012:27pezI've never gotten clojure, the Powershell module, to work on my Windows machines. But deps.clj works, so I use that. 😃#2022-09-3012:29lreadSame for me for some command lines on Windows. For continuous integration testing, I boldly rename deps.exe to clojure.exe.#2022-09-3012:29lreadOr use bb clojure.#2022-09-3009:59bortexz• Released initial version of https://github.com/bortexz/tacos , a collection of timeseries technical analysis indicators as graphcom nodes.
• Also added a rationale to https://github.com/bortexz/graphcom , hoping it better explains the why/what for this library, as well as linking to tacos as a use case.#2022-09-3010:53javahippieWe released a new version of clj-test-containers, a Clojure wrapper around testcontainers-java. It’s a maintenance upgrade to include the new testcontainers-java version which was released yesterday.
https://clojars.org/clj-test-containers/versions/0.7.3#2022-09-3012:19Martynas MThis is a duplicate message from events channel but probably it's also a good idea to spam it here.
I developed a web front-end for Clojure events calendar-feed:
https://mmaciul.lt/cljcalendar/
This is seeded from the same calendar as https://clojurians.slack.com/archives/C06MAR553/p1664461794012249
(underlying event collection done by eval2020)#2022-09-3017:39seancorfieldIs it open source we can go look at?#2022-10-0101:16Martynas MIt's in my github:
https://github.com/Invertisment/cljcalendar
There is no google, no trackers, nothing. Just clean calendar. I haven't even written any readme 😄
I'll add some kind of license, I think#2022-10-0101:19Martynas MAnd credentials, of course. But I didn't bother with it yet.#2022-10-0101:35Martynas MDo you want to host it on some kind of proper domain? Why do you ask? Maybe I can answer something.#2022-10-0103:20seancorfieldI figured folks would want to see how it was built if it was public.#2022-10-0103:20seancorfield(and I was curious whether it was Clojure/Script or not)#2022-10-0108:42Martynas MWell... I wanted to use ClojureScript and re-frame. But then I decided that there is just too little code to be useful and relearn re-frame (I recreated a new project for this one about 5 times and then gave up). This is basically just library integration where types actually are useful quite a bit.
i.e. this kind of UI is not state-heavy but integration-heavy. i.e. integration dominates this code.#2022-09-3013:33Ertugrul CetinHi all, I've developed a library called procedure.async, which provides async procedures for Clojure
https://github.com/ertugrulcetin/procedure.async
Why?
• It'd be interesting to have re-frame's reg-sub like flow on the backend (we have reg-pro - register procedure) - which forces us to develop handlers in a certain way
• reg-pros have dependencies (similar to reg-sub's :<- [:some-procedure-id]) and they realize asynchronously, so that gives some computational power
• It allows a more natural way to keep frontend and backend code in the same file (.CLJC)
• Frontend communicates via procedure's id directly (e.g. (dispatch-pro [:procedure-id payload-map]) - like dispatching re-frame event)
• We can implement re-usable/high-level UI components in the same file with reg-pros, allowing us to have a close view of what is happening in a single unit
• This design makes it easier to apply changes for both sides
• Feels like Storybook for both frontend and backend!#2022-09-3016:38MattiasFor the uninitiated, what does procedure mean here? What context is the word from? Thanks! 😀#2022-09-3021:46Ertugrul CetinThe book SICP (one of the essential books in the LISP world), was calling functions to procedures 🙂#2022-09-3015:54hlshipio.aviso/pretty 1.2
Pretty prints things prettily; mostly, carefully formatted exception output using ANSI colors, smarter ordering, and name-demangling to take the pain out of figuring out what went wrong, and where.
This release buffers the exception output until it is complete before printing; this helps greatly in multi-threaded environments as it keeps any exception output across multiple threads from
getting interleaved in the console.
https://github.com/AvisoNovate/pretty#2022-09-3016:20hlshipIf often wonder how many people use pretty vs. how many just get it as a transitive dependency from other tools and libraries? It's up over 13M downloads across all versions, and 630K downloads just for version 1.1.1.#2022-09-3016:45phronmophobicIt wouldn't be too much work to find that out. Clojars has some pretty good data resources, https://github.com/clojars/clojars-web/wiki/Data. If you just look at the top level dependents, https://clojars.org/io.aviso/pretty/dependents, it seems like timbre is major user, but you would probably have to start downloading poms to try and figure out what might be pulling in the latest version.#2022-09-3016:49phronmophobicAt some point, I did some analysis comparing clojars downloads to github stars and there's some interesting outliers, https://clojurians.slack.com/archives/C8V0BQ0M6/p1648936381720099?thread_ts=1648735337.140649&cid=C8V0BQ0M6#2022-09-3016:49phronmophobicFor example, https://clojars.org/crypto-equality has 22 github stars, but almost 18 million downloads#2022-09-3023:13magnarsParens of the Dead
Seven years ago there was a hectic little screencast where I coded a game, like, so very quickly. This time I'm joined by @christian767 to do something hopefully a bit more entertaining, useful and informative. The first two episodes are out as we speak. More to come every Friday. ☀️😊
https://www.parens-of-the-dead.com#2022-09-3023:20seancorfieldGreat to see this "come back from the dead" so to speak!
If you want to announce new episodes as they appear, consider posting in #news-and-articles as this channel -- #announcements -- is primarily intended for major project/library announcements.#2022-09-3023:21magnarsExcellent, thanks for the pointer. I'll join there at once. 🙂#2022-09-3023:28ChaseOh cool! I stumbled on those older screencasts early in my developer and clojure journey and thought it was so cool. I admired the proficiency and it made me want to up my skills too.#2022-10-0108:11robert-stuttaford@U07FCNURX i have always loved this and shared it with everyone who's learning. so great to see it getting an update!#2022-10-0108:55magnarsThanks, @U0509NKGK! That's great to hear. ❤️ I think this version might be better suited for learners also, since it's not so frantic, and there's more conversation.#2022-10-0215:40FlowI’ve written here about secrets.clj already, a year or two ago. But I’ve improved things since then, so may be someone will find it useful.
https://github.com/lk-geimfari/secrets.clj designed to generate random numbers suitable for security purposes.
It has API which is similar to Python’s https://docs.python.org/3/library/secrets.html module:
user=> (sc/token-hex 32)
"2aa5430064918acf140bb423678cef7353f7055597bc61305414c5371106ebef"
user=> (sc/token-urlsafe 32)
"kfbGVrB6jz6hyOl_2rX9UIHgiop2-rM_jo2XEK7oTj0"
user=> (sc/token-bytes 16)
#object["[B" 0x3b2454e9 "[
The library is dead simple, but may be still useful for managing secrets.
Source: https://github.com/lk-geimfari/secrets.clj
Feature requests are welcomed, of course.
Thank you’ll for attention 😊.#2022-10-0309:52Linus EricssonConsider using https://docs.oracle.com/javase/8/docs/api/java/security/SecureRandom.html#getInstanceStrong-- instead of the (wesk) sha1prng that is the default in secureRandom.#2022-10-0315:47FlowI’ll take a look. Thank you very much! ❤️#2022-10-0315:56FlowI’ve created an issue: https://github.com/lk-geimfari/secrets.clj/issues/11
I’ll fix it soon. Thank you again!#2022-10-0318:41Jacob O'Bryant#biff https://github.com/jacobobryant/biff/releases/tag/v0.5.0 is out with a fairly significant addition: feature maps now support a :queues key which makes it convenient to create java.util.concurrent.BlockingQueues and associated thread pools for consuming them.
Also:
• Updated XTDB to 1.22.0 (breaking change, requires re-indexing)
• Uses add-libs to add new dependencies from deps.edn on file save, without needing to restart the repl
There is some additional discussion of the new queues feature in the https://biffweb.com/p/september-updates/ post.#2022-10-0320:18Jeff Evanskc-repl - an interactive took for exploring Apache Kafka clusters. Still a little bit rough around the edges, but should be fully functional. PRs welcomed (I’m using GitHub to track issues), especially if you have any experience getting CI going for a GitHub based project!
https://github.com/jeff303/kc-repl#2022-10-0320:24Ben SlessI was going to write that one day out of frustration!
Going to take it out on a spin#2022-10-0320:56Jeff EvansAwesome, let me know if you manage to get it to work for your case. I’m focusing on Protobuf support next (to scratch my own personal itch)#2022-10-0421:47lreadclj-yaml v1.0.26 - YAML encoding and decoding for Clojure
Highlights from the https://github.com/clj-commons/clj-yaml/blob/master/CHANGELOG.adoc#v1.0.26:
• Unbroke accidental breaking change to low-level decode fn that we didn’t realize some folks were using
• Added :key-fn to parse-string and parse-stream for full control over YAML key conversion
• Docs and docstrings reviewed and updated, public API defined and guidance on usage of low-level functions added.
• Continuous integration is now also testing on Windows, all supported JDKs, all supported versions of Clojure and is linting.
clj-yaml is one of the many projects under the loving care of https://github.com/clj-commons.#2022-10-0515:44borkdudeAn all new shiny clj-kondo clj-kondo clj-kondo release with lots of new features and improvements! 🎉
Clj-kondo is a static analyzer and linter for clojure code that sparks joy ✨.
It's also providing the analysis and linting in clojure-lsp
2022.10.05
• https://github.com/clj-kondo/clj-kondo/issues/611: New linter: :unused-value - see https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#unused-value. Also see issue https://github.com/clj-kondo/clj-kondo/issues/1258.
• https://github.com/clj-kondo/clj-kondo/issues/1794: New linter: :line-length - see https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#line-length (https://github.com/ourkwest)
• https://github.com/clj-kondo/clj-kondo/issues/1460: New linter: :unknown-require-option - see https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#unknown-require-option. (https://github.com/NoahTheDuke)
• https://github.com/clj-kondo/clj-kondo/issues/1800: New linter: :aliased-namespace-symbol - see https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#aliased-namespace-symbol. (https://github.com/NoahTheDuke)
These and other changes can be found in the fhttps://github.com/clj-kondo/clj-kondo/blob/master/CHANGELOG.md#20221005
Join the channel at #clj-kondo#2022-10-0515:51borkdudeA special thank you to @UEENNMX0T, who, as you can see has been contributing a lot :)#2022-10-0516:21lreadHeya @UEENNMX0T lookie what your new :aliased-namespace-symbol linter found in cljdoc sources! ❤️
src/cljdoc/server/pedestal.clj:562:44: warning: An alias is defined for cljdoc.render.build-log: render-build-log
src/cljdoc/server/pedestal.clj:615:4: warning: An alias is defined for io.pedestal.interceptor: interceptor
src/cljdoc/server/pedestal.clj:617:15: warning: An alias is defined for io.pedestal.http.impl.servlet-interceptor: servlet-interceptor
src/cljdoc/server/pedestal.clj:618:15: warning: An alias is defined for io.pedestal.http.impl.servlet-interceptor: servlet-interceptor
src/cljdoc/server/routes.clj:93:14: warning: An alias is defined for io.pedestal.http.route: route
src/cljdoc/server/routes.clj:97:22: warning: An alias is defined for io.pedestal.http.route: route
src/cljdoc/server/routes.clj:98:21: warning: An alias is defined for io.pedestal.http.route: route
src/cljdoc/server/routes.clj:103:12: warning: An alias is defined for io.pedestal.http.route: route
src/cljdoc/server/system.clj:116:4: warning: An alias is defined for integrant.core: ig
src/cljdoc/util/fixref.clj:97:22: warning: An alias is defined for clojure.string: string
linting took 2287ms, errors: 0, warnings: 10
#2022-10-0519:49Noah BogartI've contributed to many open source projects but this one might be my favorite. A real pleasure to work with you on it#2022-10-0518:39ericdalloclojure-lsp Released https://clojure-lsp.io/ https://github.com/clojure-lsp/clojure-lsp/releases/tag/2022.10.05-16.39.51 with lots of improvements and fixes 🎉
Main highlights:
• Critical performance fix introduced on previous release, please try this release if having any performance issues. Kudos to @jacob.maine
• We now have a new CLI/API command: clojure-lsp dump -- This should build and return lots of information about your project like clj-kondo normalized analysis, project information, dependency-graph and others, if you want do some kind of data analysis in your project/s, consider giving it a try.
• Lots of critical fixes for Windows -- Thanks to the huge help of @chaos (@ikappaki)
• We now decompile the whole jar if it's a java project, offering whole lsp-java features 🚀
For complete changelog and more info, check #lsp
Thank you for all supporters and help during this release! gratitude#2022-10-0518:40borkdudeWhen will the brew package be updated?#2022-10-0518:41borkdudeah now works :)#2022-10-0518:51Eugenthanks for Java integration. I am missing java class navigation. looking forward to trying it out#2022-10-0520:03Noah Bogartclojure-lsp dump >> dump.edn produces a 148mb file lol#2022-10-0520:13ericdalloBig data, almost a mini data lake 😛#2022-10-0520:14Noah BogartI suspect the file will be smaller when I don't run it over our production codebase (roughly 150k lines)#2022-10-0520:16ericdalloAlso not sure you are interested on all output keys, that's why there is the filter-keys flag :)#2022-10-0520:39borkdudeyou could also run clj-kondo analysis directly on (parts of) your project to get smaller output#2022-10-0520:07Asko Nōmmhttps://github.com/askonomm/ruuter, a tiny, Babashka compatible, zero-dependency HTTP router
• Implemented support for wildcard parameters
• Fixed issue where if you used multiple optional parameters, they would get wrong data from the URI.#2022-10-0608:14Matthew Davidson (kingmob)https://github.com/clj-commons/potemkin has been released.
There are no changes to functionality. Everything should work as before.
The major change is improved support for clj-kondo. While not comprehensive, it should cut down on false positives. Note that import-vars was already handled specially by clj-kondo, so if that’s the only potemkin macro you use, you shouldn’t see any differences.
Minor changes include doc improvements, the minimum Java version is now 8, and the fast-bound-fn and fast-memoize fns are deprecated (they’re almost never faster than modern Clojure).#2022-10-0610:44ericdalloThat's awesome!#2022-10-0608:51Ivar Refsdalhttps://github.com/ivarref/clj-paginate, fast pagination of vectors and maps with Clojure for GraphQL, has been released.
This release adds support for multiple sort criteria (ascending or descending), e.g. you may specify sort-attrs as [[:date :desc] [:id :desc]].
It also adds support for the named parameter :inclusive? that allows a user to refresh a page based only on an old pageInfo/connection.
It introduces the named parameter :sort? that defaults to true. clj-paginate will now (by default) sort the data for you.
Power users, people who already cache the (sorted) data to be paginated, can disable that feature.#2022-10-0614:24borkdudeThe first public release of gh-release-artifact : Upload artifacts to Github releases idempotently
This is small library that I've been using in projects like babashka, clj-kondo, and others, for a few years now, to automatically upload files to Github releases. This library is especially handy when your project is built from different CIs and releases for those files have to be created idempotently (babashka currently uses 4 different CIs to build releases on).
Repo: https://github.com/borkdude/gh-release-artifact
The main API function is here:
https://github.com/borkdude/gh-release-artifact/blob/main/API.md#borkdude.gh-release-artifact/release-artifact#2022-10-0620:42Cam SaulMethodical 0.15.0 is out! https://github.com/camsaul/methodical/releases/tag/0.15.0.1
Methodical is a library that acts like a drop-in replacement for Clojure multimethods, with tons of extra features, support for functionally/non-destructively composing multimethods, better error checking, and debugging tooling.
The last few releases have focused on improving the developer experience with better error checking, documentation generation, and tooling, and 0.15.0 continues this theme.
The marquee feature of 0.15.0 is support for macroexpansion-time defmethod arglist arity validation. If you have a three-arg multimethod and try to write a defmethod for it that takes only two args, get an error message right away!
(m/defmulti ^:private mf
{:arglists '([x]), :defmethod-arities #{1}}
keyword)
(m/defmethod mf :x [x] x)
;; => ok
(m/defmethod mf :x ([x] x) ([x y] x y))
;; => error: {:arities {:disallowed #{2}}}
(m/defmethod mf :x [x y] x y)
;; => error: {:required #{1}, :disallowed #{2}}
(Yes, this works with rest-argument & arities as well!)
0.15.0 also includes improved error messages, a bug fix, and ten new utility functions.#2022-10-0620:47Noah BogartThat's sick! How does it work? Just checking the :arglists of the metadata?#2022-10-0620:52Cam SaulI considered doing that at first but decided that was ultimately too fragile, especially if you have "fancy" :arglists metadata like [x y z?] (meaning [x y] [x y z])
So instead you can attach a set of :defmethod-arities metadata that is a set of allowed arities; each arity is represented by either an integer or by a [:>= n] form for an arity with & rest arguments.
The example above demonstrates using a plain integer arity. Here's an example that includes a 3-or-more-args arity:
;; methods must both a 1-arity and a 3+-arity
(m/defmulti ^:private mf
{:arglists '([x] [x y z & more]), :defmethod-arities #{1 [:>= 3]}}
keyword)
(m/defmethod mf :x ([x] x) ([x y z & more] x))
;; => ok
(m/defmethod mf :x [x y] x)
;; => error: {:arities {:required #{1 [:>= 3]}, :disallowed #{2}}}#2022-10-0620:53Cam Saulit's smart enough to figure out if you cover your bases with other arities that aren't exactly the same as what was asked too:
(m/defmulti ^:private mf
{:arglists '([x y z & more]), :defmethod-arities #{[:>= 3]}}
keyword)
(m/defmethod mf :x
([a b c] x)
([a b c d] x)
([a b c d & more] x))
;; => ok, because everything required by [:>= 3] is covered, and everything present is allowed by [:>= 3]#2022-10-0621:40Noah BogartOh I see. Okay, that makes sense. Very cool#2022-10-0708:05Ferdinand BeyerI've created a tiny VS-Code extension to run Babashka Tasks. First release v0.1.0 is out!
https://marketplace.visualstudio.com/items?itemName=fbeyer.babashka-tasks#2022-10-0709:14Ferdinand BeyerSource code (ClojureScript) is here:
https://github.com/ferdinand-beyer/vscode-babashka-tasks#2022-10-0905:17grzmhttps://github.com/grzm/awyeah-api com.grzm/awyeah-api {:git/tag "v0.8.35", :git/sha "1810bf6"} is available
• Catch up to aws-api 0.8.596.
• Fix handling of HEAD HTTP requests (such as S3 HeadObject).
• Fix broken client datafy compatibility.
• Use GMT instead of UTC for timestamp formatting.#2022-10-0913:26borkdudeThanks :)#2022-10-0915:53borkdudeNbb: Node.js babashka v1.0.136! (yes, 1.x.x!)
Scripting in Clojure on Node.js using SCI
1.0.136
• https://github.com/babashka/nbb/issues/258: improvements for loading namespaces and JS code asynchronously
• Fix compatibility with latest HoneySQL version
• Bump promesa to latest version and include promise-aware doseq macro
Github: https://github.com/babashka/nbb
Npm: npm i
Join the channel at #nbb#2022-10-1013:56seriogaFirst beta release of the parsesso — the new parser combinators library for Clojure(Script)
https://github.com/strojure/parsesso#2022-10-1015:35Joshua SuskaloThis is awesome, I'm glad to see a good option with lookahead that can target non-string tokens#2022-10-1015:49seriogaI suppose all existing implementations work with non-char tokens#2022-10-1015:51Joshua SuskaloOf parser combinators yes, although we don't have a lot of well-supported options for that in Clojure. The main parser options we have are spec (which lacks lookahead) and instaparse (which doesn't support non-character tokens)#2022-10-1015:51Joshua SuskaloUnless I missed a third good option#2022-10-1015:58serioga@U5NCUG8NR I'm open for suggestions what to add in the library for specific real needs :-)#2022-10-1016:05Joshua SuskaloAwesome, I may get back to you. At the moment most of the projects that I've needed parsers for have died due to the lack of options I had, so I might pick some back up.#2022-10-1014:15valeraukoMade an example how to do server side rendering with re-frame + reitit + shadow-cljs + deno. Quite a few catches so hope someone will find it useful
https://github.com/valerauko/hoge#2022-10-1016:22blueberryNew version published: Deep Learning for Programmers 2nd ed v 0.31.0 https://aiprobook.com/deep-learning-for-programmers/?release=0.31.0&src=cslack#2022-10-1016:43borkdudeNew #quickdoc release
https://github.com/borkdude/quickdoc
Quickdoc analyzes your source code with clj-kondo and spits out an API.md file which you can check directly into source control.
The tool works with Clojure and #babashka.
v0.2.2
• Improved table of contents and source links (https://github.com/helins)
• Support wiki syntax for var linking: [[foo]] (https://github.com/helins)
• Upgrade clj-kondo to 2022.10.05
Big thanks @adam678 to for the improvements#2022-10-1116:04pezThere's a new #joyride in town: https://github.com/BetterThanTomorrow/joyride/releases/tag/v0.0.18
• https://github.com/BetterThanTomorrow/joyride/issues/92
• Fix: https://github.com/BetterThanTomorrow/joyride/issues/87
This is huge. Think about it. You now have npm reach! Thanks @borkdude! And thanks @eveningsky for improving the development of Joyride! ❤️ 🙏 joyride#2022-10-1119:20pezDear Clojurians. We just released Calva https://github.com/BetterThanTomorrow/calva/releases/tag/v2.0.307, with support for user/global REPL snippets via a config.edn file. It has always been possible to provide these via JSON, but it's quite clunky with JSON when writing Clojure code... Here's the top of the Changelog:
• https://github.com/BetterThanTomorrow/calva/issues/1887`~/.config/calva/config.edn`
• https://github.com/BetterThanTomorrow/calva/issues/1885`.calva/config.edn`https://github.com/BetterThanTomorrow/calva/issues/1885
• https://github.com/BetterThanTomorrow/calva/issues/1876
• https://github.com/BetterThanTomorrow/calva/issues/1878`v0.9.0`
• Fix: https://github.com/BetterThanTomorrow/calva/issues/1880`calva.evalOnSave`https://github.com/BetterThanTomorrow/calva/issues/1880`calva.testOnSave`https://github.com/BetterThanTomorrow/calva/issues/1880
• Bump pre-bundled deps.clj.jar to v1.11.1.1165
• https://github.com/BetterThanTomorrow/calva/issues/1871
• Fix: https://github.com/BetterThanTomorrow/calva/issues/1869
• https://github.com/BetterThanTomorrow/calva/issues/1767
• Document workaround for: https://github.com/BetterThanTomorrow/calva/issues/1866
• Fix test running issue: https://github.com/BetterThanTomorrow/calva/issues/1821
• https://github.com/BetterThanTomorrow/calva/issues/1843
• Fix: https://github.com/BetterThanTomorrow/calva/issues/1857
• https://github.com/BetterThanTomorrow/calva/issues/1859`deps.edn`https://github.com/BetterThanTomorrow/calva/issues/1859`:main-opts`
• https://github.com/BetterThanTomorrow/calva/issues/1853
• Fix: https://github.com/BetterThanTomorrow/calva/issues/1855
#2022-10-1209:15plexusLaunchpad 0.9.49-alpha is out, a Clojure nREPL launcher offering quality of life and fewer REPL restarts.
• allow specifying additional alias definitions in deps.local.edn (also hot-reloads)
• kill the clojure process when launchpad dies, and vice versa
https://github.com/lambdaisland/launchpad#2022-10-1219:17arohnerhttps://github.com/griffinbank/rules_clojure is now stable. rules_clojure adds Clojure support to Bazel, the multi-language build tool. Bazel supports test caching and Remote Build Execution for dramatically faster build and test times#2022-10-1221:07borkdudeNeil, a CLI tool to add common aliases and features to deps.edn-based projects.
0.1.46 (2022-10-12)
• Introduce neil dep upgrade API for upgrading existing dependencies. By https://github.com/teodorlu and https://github.com/russmatney.
• Add nix flake. By https://github.com/jlesquembre.
• neil version improvements. By https://github.com/rads.
Repo: https://github.com/babashka/neil
Channel: #babashka-neil#2022-10-1314:35Felipe ReigosaHey guys, this time I proved that MockMechanics is Turing complete (not a big surprise). I created the smallest universal Turing machine without using any code. Let me know what you think. MockMechanics is open source and written in clojure, check out the repo here:
https://github.com/felipereigosa/mock-mechanics
Also I often post videos about it here:
https://www.youtube.com/c/MockMechanics#2022-10-1411:23borkdudelein2deps: a leiningen to deps.edn converter 🔥
https://github.com/borkdude/lein2deps#2022-10-1411:25thomasI am going to try this to convert my part Java/Clojure project to deps.edn. Thank you for this!!! 🙏#2022-10-1411:30jpmonettasNice, @U04V15CAJ on the readme it says For some reason this does work from inside the project you probably meant doesn't . Or am I just confused?#2022-10-1411:32borkdude@U0739PUFQ True, corrected#2022-10-1411:33borkdudeAlso see https://clojurians.slack.com/archives/C6QH853H8/p1665566737221019 (no reaction there yet)#2022-10-1414:52borkdudeNow with support for :scope "provided" - aaaaah, the talk preparation procrastination#2022-10-1418:31dchelimskyhttps://groups.google.com/g/clojure/c/1p3v71uWJY0/m/tX8p4eMDCgAJ#2022-10-1617:14Mark StoJetBrains have launched the public preview for their new Fleet IDE. Please, upvote https://youtrack.jetbrains.com/issue/FL-15340/Support-for-Clojure so we can all enjoy faster Clojure integration.#2022-10-1709:29mbjarland+1 for this. The architecture and idea of fleet looks promising. It’s nowhere near cooked enough to be a candidate today but having read their article series about fleet I have high hopes.
For those in a hurry and not familiar with youtrack, you had to hit the three dots to find the vote button:#2022-10-1709:31mbjarlandah take it back, there was a little icon to the right as well:#2022-10-1709:35mbjarland#2022-10-1709:35mbjarlandthey sure made that icon tiny#2022-10-1716:07Annaia Danversclassic JetBrains UI design#2022-10-1719:51Mark Sto😅#2022-10-1618:36ikitommi[metosin/malli "0.9.0"] is out! Malli is a high-performance data-driven data specification library for Clojure/Script. Most notable changes:
• Malli can now properly generate recursive schemas by using test-check’s recursive-gen. Kudos to @ambrosebs for the many rounds on design and implementation on this. For the curious, see https://github.com/metosin/malli/blob/master/src/malli/generator.cljc and tests for the details.
• CLJS instrumentation is moved to runtime and supports now multi-arity and varargs functions, 🙇 @danvingo
• New compact presentation for error values via malli.error/error-value, inspired by Expound
• Improved regex schema driver cache performance by @ben.sless
• Source-compatibility with #C029PTWD3HR by @borkdude
• Improved printing of errors with CLJS
• Sequence to Tuple transformers
All changes: https://github.com/metosin/malli/blob/master/CHANGELOG.md#090-2022-10-16
Code: https://github.com/metosin/malli
Big thanks to all contributors and to the whole #CLDK6MFMK community!#2022-10-1708:39ikitommi… and there is now [metosin/malli "0.9.1"] with a small fix:
• Fix instrument! in dev.cljs/start! - pass cljs function schemas https://github.com/metosin/malli/pull/766#2022-10-1719:42mkvlr👁️ Clerk – Moldable Live Programming for Clojure io.github.nextjournal/clerk {:mvn/version "0.11.603"} has been released . ✨
Notable improvements in this release:
• 🚰 Tap Inspector to let Clerk show clojure.core/tap> stream. Viewable via (nextjournal.clerk/show! 'nextjournal.clerk.tap)
• :juggling::skin-tone-2: Improvements to static building including Clerk-viewer based build progress reporter (via :dashboard option). Also support customizing :index.
• 🌈 Extend nextjournal.clerk/show! accept more argument types, also loading notebooks from urls or passing showing a notebook from a java.io.StringReader (useful in remote repls)
• 🦾 Support babashka.cli for nextjournal.clerk/serve! and nextjournal.clerk/build! via metadata annotations. To use it add org.babashka/cli {:mvn/version "0.5.40"} or newer to your :deps and set :main-opts ["-m" "babashka.cli.exec"]
And much more, get all details in the:wood: https://github.com/nextjournal/clerk/blob/549b581eff7692a6ed0ae676370265ba12708489/CHANGELOG.md#011603-2022-10-17, find the release on 📦 https://clojars.org/io.github.nextjournal/clerk, read the 📖 http://github.clerk.garden/nextjournal/book-of-clerk/commit/32451f85976ff5e0bc18941f42e1d3e8ce859640/, follow-up in #C035GRLJEP8.#2022-10-1805:06robert-stuttafordtap inspector 😍#2022-10-1805:06robert-stuttafordstrong emoji game here @U5H74UNSF 👏#2022-10-1811:12jpmonettas[ANN] FlowStorm Clojure[Script] debugger 3.1.259 is out
FlowStorm is a Clojure and ClojureScript debugger with some unique features.
Most remarkable new features for this version are :
• Add support for core.async/go blocks instrumentation
• Add #rtrace ^{:thread-trace-limit X} where X is a int. Execution will throw after tracing X times. Useful as a fuse for debugging possibly infinite loops
• Add support for snapshoting mutable values via flow-storm.runtime.values/snapshot-value multimethod
• Add #tap-stack-trace, to tap the current stack trace wherever you add it
• Add [Ctrl|Alt]+MouseWheel on forms to step prev/next
• Alt+Tab now works on MacOs for switching between the debugger and the repl windows (thanks to Lucy Wang @lucywang000)
• Fix extend-protocol and extend-type instrumentation for ClojureScript
• Fix instrumentation breaking variadic functions in ClojureScript
• And a lot of bug fixes
Github repo : https://github.com/jpmonettas/flow-storm-debugger/
User Guide https://jpmonettas.github.io/flow-storm-debugger/user_guide.html
Big thanks to Roam Research (https://roamresearch.com/) for sponsoring the project!
If you have any questions please show up on #flow-storm
Cheers!#2022-10-1817:12jpmonettasIf anybody gets a google dependency conflict when adding the debugger to a Clojure project, try the latest commit which removes the hard dependency on ClojureScript.
The coordinates are : {:git/url "" :sha "eda9c04237cd947fff43861c15197458165683fd"}#2022-10-1813:20Alex Miller (Clojure team)Clojure just turned 15 years old and we want to celebrate this achievement with you!
In this special edition of the https://www.linkedin.com/events/clojureturns15-buildingnuengine6987854393173807104/about/, the Clojure team will hold a round table celebrating 15 years of Clojure! clojure
Back in 2005, Rich Hickey started the development of Clojure during a sabbatical, releasing it in 2007. Since then, Rich's team has grown and Clojure has become one of the most loved programming languages out there (e.g., 3rd place on the 2022 Stack Overflow Developer Survey) with adoption in many industries.
We at Nubank are proud to be the global sponsors of Clojure and invite you to this celebration. Jaret Binford will host a roundtable on Zoom, Oct 26th at 5:30 pm US EDT with Rich Hickey, Stuart Halloway, Alex Miller, and Michael Fogus. The talk will be hosted in English and will have live interpretation in Portuguese and Spanish.#2022-10-1813:39flowthingWill the talk be recorded?#2022-10-1813:42Alex Miller (Clojure team)I assume so#2022-10-1813:46eval2020Added to the https://www.clojurians-zulip.org/feeds/events.ics! 📆#2022-10-1813:52Alex Miller (Clojure team)thanks! and yes it will be recorded#2022-10-1817:42borkdudeExciting :) It's quite late in the day for me, so I will probably drop off at some point and watch the rest later.#2022-10-2609:06practicalli-johnI’ll be fast asleep for the live event, but looking forward to watching the recording. Thanks to everyone for making Clojure such a wonderful success and a joy to use every day.#2022-10-2707:28borkdudeLooking forward to the recording, as I missed this completely due to ... sleep :)#2022-10-1813:34plexuslambdaisland/deja-fu 1.3.51 is out. deja-fu is a ClojureScript time library with a delightful API, and this release adds support for rendering relative time strings like "5 minutes ago" https://github.com/lambdaisland/deja-fu#2022-10-2007:55emilaasaThat is a truly great name plexus 🙂#2022-10-1814:54borkdudeSCI - Configurable Clojure interpreter suitable for scripting and Clojure DSLs sci
v0.5.34 (2022-10-18)
• Performance optimizations for let (up to 8x faster)
• https://github.com/babashka/babashka/issues/1340: Add arglists/docstring to protocol methods (https://github.com/bobisageek)
• #801: preserve location metadata for vars defined in macro-expansion
• Add new var->symbol API function in sci.core
• Add new resolve API function in sci.core
• Expose *print-namespace-maps* from sci.core
• Internal simplifications for and, or and do
Channel: #sci
Repo: https://github.com/babashka/sci#2022-10-1815:49mkvlr🚤 Announcing an up to 8x performance improvement for Clerk viewer functions! https://github.com/nextjournal/clerk/commit/b9d06418c0f9ef8df8fb5526a4ecaa5a957de589#2022-10-1816:26borkdudeBabashka 1.0.164, the first 1.x.x release! babashka
Native, fast starting Clojure interpreter for scripting
Babashka hasn't had any breaking change for almost 2 years, so I figured it would be a good time to drop the 0. prefix! 🎉
Release notes:
https://github.com/babashka/babashka/blob/master/CHANGELOG.md#10164-2022-10-17
Also check out the release notes of the previous release which wasn't announced in this channel, but which was quite a big one:
https://github.com/babashka/babashka/blob/master/CHANGELOG.md#010163-2022-09-24
Channel: #babashka
Repo: https://github.com/babashka/babashka
Thanks to everyone involved!#2022-10-1817:40ambrosebshuge congrats!#2022-10-1818:52Cora (she/her)congrats!!! it's such a wonderful tool#2022-10-1821:03lread@U04V15CAJ, you’ve helped me to stop hating writing bash, bat, powershell, and Makefile scripts.
That’s because, thanks to babashka, I don’t have to write them anymore!
Thanks a ton for all the sweat, thought and love you put into bb!#2022-10-1900:47djblueJust released https://github.com/djblue/portal 0.33.0, a data inspection / exploration tool for Clojure. Since the last announcement, Portal has seen a lot of improvements and integrations but here are some of the highlights:
• https://cljdoc.org/d/djblue/portal/0.33.0/doc/ui-concepts/filtering
• https://cljdoc.org/d/djblue/portal/0.33.0/doc/guides/portal-standalone#share-command (https://djblue.github.io/portal/?content-url=https://gist.githubusercontent.com/djblue/9a2cd250e061f62ce527b20648fd8256/raw/e7bd673df60b3c503306956b950bb9589ba480eb/data.clj&content-type=application/edn)
• https://cljdoc.org/d/djblue/portal/0.33.0/doc/editors/vs-code/clojure-notebooks
• https://cljdoc.org/d/djblue/portal/0.33.0/doc/guides/clerk
Drop by #portal with any questions.#2022-10-1901:39pfeodrippe^"The integration of everything with everything else!"
With this Clerk viewer, I now can add a bunch of guides on how to use Portal for my specific use case (I use Pathom and Malli, and you can navigate through them with Portal, so this will be very helpful).
- [ ] Teach how to use Portal
- [ ] Attributes navigation
- [ ] Schema examples generation
- [ ] Logs
- [ ] Exceptions
- [ ] Tap and `user/debug`
- [ ] Pathom query analyzer viewer
- [ ] Pathom traces presented as markdown elements
- [ ] Editable text using SCI (not the one in Clerk, not the one
in Portal, but our own lol)?
Many thanks \o#2022-10-1901:42wilkerlucioPathom 3 2022.10.18-alpha is out! The most fun update is that now on defresolver input inference, you can use the :or part to mark parts of the input as optional, check an example at the https://pathom3.wsscode.com/docs/resolvers/#optional-inputs
• Fix error when user requests ::pcr/attribute-errors in lenient mode
• In process-one helpers, when the value is collection it gets the run stats from the parent
• Add support for :or keyword on defresolver and defmutation args, values in :or will be flagged as optional
• Set ::pco/inferred-params when params are inferred
• Instead of overriding ::pco/input or ::pco/params when explicitly set, now Pathom will merge that with the inferred input/params
• Issue 159 - Fix placeholder nodes on dynamic resolvers
https://clojars.org/com.wsscode/pathom3#2022-10-2012:34borkdudeDual announcement:
https://github.com/squint-cljs/squint: ClojureScript syntax to JavaScript compiler - 0.0.0-alpha.50
https://github.com/squint-cljs/cherry: Experimental ClojureScript to ES6 module compiler - 0.0.0-alpha.57
Squint was previously announced here as ClavaScript, but was renamed to squint.
Many improvements have been made since August, among which a substantial core functions library written in pure JS that has counterparts to CLJS core functions.
Squint can be used to emit JavaScript from Clojure s-expressions and translates to direct JavaScript, without immutable data structures, etc, for ultra-small bundles.
Cherry is similar to squint, but is closer to normal CLJS (immutable data structures, uses core functions from CLJS proper) with the penalty for a bigger output bundle (~300kb minimum).
Both tools have much in common and share common compiler code.
Some of the distinct features compared to normal CLJS:
• 1-1 .cljs <-> .js file correspondence
• Async/await support
• Native support for JSX
• Compiled code shares a common core module and can be distributed on NPM
Work in progress:
• Factoring out more common code
• (n)REPL support#2022-10-2012:49borkdudeSee this twitter thread for a couple of highlights:
https://twitter.com/borkdude/status/1582683524364382209#2022-11-0115:34Daniel Gerson@U04V15CAJ Will squint ever be runnable on the JVM? (Thinking for sending 'eval' commands for any bridge like Playwright-Java etc).#2022-11-0115:38borkdude@U03B2SRNYTY It is already runnable on the JVM#2022-11-0115:42borkdude(require '[squint.compiler :as squint])
(squint/compile-string "(+ 1 2 3)")
#2022-11-0123:21Daniel Gerson@U04V15CAJ I guess it's not obvious without clojar details. I suppose it is :git/url includable, but I wouldn't presume it to be if the first thing I see is npm install ... . Many thanks for the info.#2022-11-0210:08borkdudeYes, we should document it#2022-11-0210:09borkdudePR welcome#2022-10-2018:20nateNew release of tabl, a cli and pod for producing tables from data: https://github.com/justone/tabl/releases/tag/v0.3.0
• Adds support for two new table formatting modes (markdown and k8s)
• Updates compatibility with latest Babashka#2022-10-2023:30hlshipio.aviso/pretty 1.3
Pretty prints things prettily; mostly, carefully formatted exception output using ANSI colors, smarter ordering, and name-demangling to take the pain out of figuring out what went wrong, and where.
Significant changes in 1.3:
The ANSI font and color constants and functions in io.aviso.ansi now are no-ops if ANSI output is disabled; there's new logic to only enable ANSI output
if in a REPL or if the JVM has a console, and an environment variable to override that decision. This make pretty less problematic when running
in a server, or as a command in a Unix pipeline, as it won't try to log ANSI codes into text log files.
New function: io.aviso.repl/-main; this simply installs pretty exceptions before delegating to clojure.core/main.
The pretty replacement for clojure.repl/pst now writes output to *err* not *out*.
https://github.com/AvisoNovate/pretty#2022-10-2117:52jaretHowdy All! Datomic 1.0.6527 is now available datomic !
https://forum.datomic.com/t/datomic-1-0-6527-now-available/2143#2022-10-2207:08kongeorI'm very happy to announce "evolduo", a platform for collaborative musical synthesis using evolutionary algorithms. This is my master's thesis project. It's open source and free to use. You can see it in action here: http://evolduo.cons.gr and check the source here: https://github.com/kongeor/evolduo-app#2022-10-2214:14respatializeddunno if you've defended this or not but congrats on finishing and releasing your thesis!#2022-10-2219:32kongeorThank you. I have finished the project work, I still have to write 50 or more pages, including usage results stats etc. that's why this is getting released now 🙂#2022-10-2211:37borkdudeClj-kondo configs clj-kondo
https://github.com/clj-kondo/configs
A repository with clj-kondo configurations for libraries, as dependencies#2022-10-2309:26Carsten BehringI started an experiment if and how it makes sense to create a library of re-usable viewers for https://github.com/nextjournal/clerk
https://github.com/behrica/casegamas
I am very much looking for all kind of reusable Clerk viewers, to see if such a collection makes sense,
so PRs or hints for existing viewers are very welcome.
It contains as well a concept of globally unique ids for viewers, see README, an other experiment.
https://github.com/behrica/casegamas/blob/main/README.md#2022-10-2320:29Daniel Slutskyvery inspiring!#2022-10-2323:42nateInitial release (v0.1.9) of https://github.com/justone/bb-pod-racer, a library to speed up the development of Babashka pods. This is in use in the https://github.com/justone/tabl and https://github.com/justone/brisk apps.#2022-10-2613:36Alex Miller (Clojure team)Clojure CLI release https://clojure.org/releases/tools#v1.11.1.1182 is now available:
• https://clojure.atlassian.net/browse/TDEPS-70 - Detect missing jar in classpath and download automatically
• https://clojure.atlassian.net/browse/TDEPS-232 - Add generic https://clojure.org/guides/install_clojure#_posix_instructions
• https://clojure.atlassian.net/browse/TDEPS-200 - Clean up default user deps.edn
• https://clojure.atlassian.net/browse/TDEPS-219 Fixed -X:deps find-versions doesn't find Maven versions that start with a letter
• Add :n option to -X:deps find-versions and default to 8
• During -X:deps prep, use :exec-args of alias being prepped, if present
• During -X:deps prep, add :current flag to prep current project, default=false
• Fix bad invocation of deps/prep-libs! in clojure.tools.cli.api/prep
• Improve error message when local dep directory is missing
• For downstream tools, added new https://download.clojure.org/install/stable.properties to look up latest stable tools release
• Update deps to latest#2022-10-2615:40borkdudeReleased deps.clj 1.11.1.1182 as well:
https://github.com/borkdude/deps.clj/blob/master/CHANGELOG.md#v11111182#2022-10-2615:40borkdude@U015879P2F8 Perhaps the MSI can updated now as well#2022-10-2619:42seancorfield@U064X3EF3 That "well-known location" still seems to have 1.11.1.1165 as the contents.#2022-10-2619:43seancorfield(my update CLI script at work checks it and won't let me install 1.11.1.1182 unless I override that 🙂 )#2022-10-2619:54Alex Miller (Clojure team)I see latest there but maybe caching is at play#2022-10-2619:54Alex Miller (Clojure team)% curl -O
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 77 100 77 0 0 287 0 --:--:-- --:--:-- --:--:-- 298
% cat stable.properties
1.11.1.1182 bbaa93430b68378ed479d4acc6cc95d1e8f70ba4dae6771b3f7959cd39af3ebf#2022-10-2620:01borkdudeAlso seeing that here#2022-10-2620:02seancorfieldI'm seeing 1.11.1.1165 on multiple machines here -- both via web browsers and via curl#2022-10-2620:03Alex Miller (Clojure team)I changed the cache TTL on that, hopefully that should help (I had done that previously on a few other "changing" things in that bucket but forgot this one)#2022-10-2620:03seancorfieldWhat's the TTL now? I'll let you know when I start seeing 1.11.1.1182#2022-10-2620:04Alex Miller (Clojure team)I also just invalidated the cloudfront cache to force a reset, that usually takes a few minutes#2022-10-2620:05Alex Miller (Clojure team)the default ttl on downloads (which is mostly append-only) is ~year. I changed this file to 60s.#2022-10-2620:05borkdudeDid you also remove that special rule you had for Sean in there? ;)#2022-10-2620:06Alex Miller (Clojure team)oh I added some extra ones for him#2022-10-2620:08seancorfieldAnd we're off to the races now! Thank you!#2022-10-2617:18Ferdinand BeyerFirst release of https://github.com/ferdinand-beyer/reitit-ring-defaults v0.1.0: sensible default middleware for Reitit.
This lifts the popular ring-defaults library with its wrap-defaults to Reitit’s data-driven middleware, for more flexibility (per-route middleware), performance and convenience!#2022-10-2716:03Alex Miller (Clojure team)https://github.com/clojure/core.async 1.6.673 is now available
• https://clojure.atlassian.net/browse/ASYNC-248 Dynamically load ioc analyzer only when needed
• Perf improvements in go macro compilation
• Note: as of this version, core.async requires Clojure 1.10+#2022-10-2716:07vlaaadHow big are the perf improvements?#2022-10-2716:10Alex Miller (Clojure team)minor. dynamically loading the analyzer is a significant improvement for aot-compiled apps though#2022-10-2716:11Alex Miller (Clojure team)in that they don't load it at all#2022-10-2716:13Alex Miller (Clojure team)which can save ~0.5s in load time#2022-10-2716:20vlaaadthat’s good!#2022-10-2716:24borkdudeand also you can exclude the analyzer as a dependency, if you're interested in that#2022-10-2717:24Ben SlessAny news regarding ASYNC-234?#2022-10-2717:27Alex Miller (Clojure team)no, hope to have some cycles to look at some more async stuff soon#2022-10-2719:29borkdudehttps://github.com/borkdude/respeced: testing library for clojure.spec fdefs
v0.1.2: compatibility with Clojure 1.11. Thanks @chaos
https://github.com/borkdude/respeced/blob/master/CHANGELOG.md#012
The previous release is from almost 4 years ago :)#2022-10-2809:24borkdudehttps://github.com/borkdude/jet: CLI to transform between JSON, EDN and Transit, powered with a minimal query language
Now with support for YAML as well, powered by #C042XAQFCCU
0.3.31 (2022.10.28)
• https://github.com/borkdude/jet/issues/74: Add yaml support (https://github.com/qdzo)
0.2.20 (2022.06.17)
• Make suitable as clj tool
0.2.19 (2022.06.17)
• Migrate CLI to https://github.com/babashka/cli
• Introduce jet.main/exec which can be called as clojure CLI exec fn
#2022-10-2815:10seriogaYet another lazy map implementation 🙂
zizzmap — Persistent map with lazily evaluated values for Clojure(Script).
https://github.com/strojure/zizzmap#2022-10-2815:12dpsuttoni’ve never seen this style. interesting
(extend-protocol InternalAccess
nil,,,,,,,,,,,,,,, (internal-map [_] {})
ObjMap,,,,,,,,,,,, (internal-map [this] this)
PersistentArrayMap (internal-map [this] this)
PersistentHashMap, (internal-map [this] this)
ITransientMap,,,,, (internal-map [this] this))#2022-10-2815:14seriogayou've just seen it 🙂
Sometimes I use commas to align things#2022-10-2822:32KelvinReleasing version 0.1.1 of https://github.com/yetanalytics/flint-jena, a companion library to my https://github.com/yetanalytics/flint library.
This library translates Flint EDN directly into Apache Jena objects, without the intermediate step of compiling a SPARQL string; this generally results in a doubling of performance.#2022-10-2922:06uochanJust pushed thrempl, A proof of concept for simple template engine using threading macros.
https://github.com/liquidz/thrempl
E.g.
(render "{{-> name greet}}!"
{:name "world" :greet #(str "Hello " %)}))
;; => "Hello world!"
(render "{{->> name (str \"Hello \")}}!"
{:name "world" :str str}))
;; => "Hello world!"#2022-10-3015:23vlaaadNew release of #cljfx dev tools — https://github.com/cljfx/dev 1.0.36 — now has interactive props&types reference UI and live cljfx component tree inspector! Many thanks to clojurists-together Clojurists Together for funding this work!#2022-10-3116:13dvingoI have been iterating on new features of my subscriptions library (originally extracted from re-frame)
https://github.com/matterandvoid-space/subscriptions
and have some major additions:
- support subscriptions that are just functions (defsub API), you can subscribe to the function directly and
invoke them which will return the current value (no need to deref!)
- support layer2 subscriptions that are Reagent Cursors getting rid of the needless re-running of all layer2 subs when app-db is swap!'d
- Given a Fulcro component, automatically create subscriptions that will fulfill arbitrary
EQL queries for that component (and any nested components).
- recursive EQL joins can have an arbitrary transformation function and an arbitrary
expansion function to easily pull only parts a component graph
- this support works on top of any Clojure database with an entity API, in addition to working on the frontend cljs.
- Performant react hooks integration, subscription arguments are memoized by default for you, all subscriptions used by a component are cached until the component is unmounted.
- use react context so that you don't have to pass through your app-db to your entire component tree.
check the cljdoc output for a more pleasant reading experience:
Readme: https://cljdoc.org/d/space.matterandvoid/subscriptions/2022.10.29/doc/readme
EQL docs: https://cljdoc.org/d/space.matterandvoid/subscriptions/2022.10.29/doc/eql-queries-via-subscriptions
React Hooks docs: https://cljdoc.org/d/space.matterandvoid/subscriptions/2022.10.29/doc/react-hooks-subscriptions
My main motivation is constructing a library to be used with fulcro to allow for large scale
cljs web application development, by combining the best parts of fulcro with those from re-frame.
To test out this integration, I have a todomvc clone that uses fulcro for app-db, mutations, and transactions, helix for rendering and using the subscription hooks and pathom + datalevin for a backend, plus using malli function instrumentation in clj+cljs.
https://github.com/matterandvoid-space/todomvc-fulcro-subscriptions
Looking forward to hearing any thoughts or feedback!#2022-10-3116:37pithyless@U051V5LLP I think https://github.com/matterandvoid-space/todomvc-fulcro-subscriptions is private, as I'm seeing a 404#2022-10-3117:14fvides+1#2022-10-3118:00dvingo@U05476190 thanks! (facepalm) fixed it#2022-11-0103:58quantisanStepwise v0.8.0 is released. Added support for nested AWS Step Function calls and more inter-step JSON manipulation. We use Stepwise extensively at Motiva AI to orchestrate our Clojure services and workflows. Happy to answer any question.
https://github.com/Motiva-AI/stepwise#2022-11-0417:08Lyn HeadleyWow. This is really impressive. At work we work so hard to build our step functions, this makes it seem so easy.#2022-11-0108:46flowthingv0.17.0 (alpha) of Tutkain, a Sublime Text package for interactive Clojure development, is out, with pretty good Babashka support.
Changelog: https://github.com/eerohele/Tutkain/blob/master/CHANGELOG.md#0170-alpha---2022-10-31
Documentation: https://tutkain.flowthing.me
Follow up in #tutkain.#2022-11-0108:46flowthingA little preview of the new Babashka support:
https://tutkain.flowthing.me/bb.mov#2022-11-0109:03borkdudeThanks! Also shared it https://twitter.com/borkdude/status/1587369613075124225#2022-11-0109:49flowthingThanks, and many thanks once more for accommodating the necessary changes in Babashka and SCI!#2022-11-0115:06Vesa NoriloLooks very nice! Does it play along with Figwheel?#2022-11-0115:24flowthingNot currently, no, sorry. I tried implementing Figwheel support a while ago, but it didn’t work out. I could give it another try. Ideally, I’d like Tutkain to be agnostic with regard to build tools and just support CLJS, but that is sadly not possible.#2022-11-0115:32Vesa Norilono worries. I might give it a try if I find time.#2022-11-0115:33flowthingCool. If you do and have any questions, just let me know.#2022-11-0217:30borkdudeClj-kondo, a linter and static analyzer for Clojure code that sparks joy ✨ clj-kondo
2022.11.02
• https://github.com/clj-kondo/clj-kondo/issues/1846: new linters: :earmuffed-var-not-dynamic and :dynamic-var-not-earmuffed. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#dynamic-vars.
• https://github.com/clj-kondo/clj-kondo/issues/1842: Add :exclude option to :used-underscored-binding (https://github.com/staifa)
• https://github.com/clj-kondo/clj-kondo/issues/1840: Fix warning in .cljs and .cljc for :aliased-namespace-symbol in interop calls. (https://github.com/NoahTheDuke)
• https://github.com/clj-kondo/clj-kondo/issues/1845: add :derived-location to analysis when location is derived from parent node
• https://github.com/clj-kondo/clj-kondo/issues/1853: fix :level :off not being respected in :discouraged-var configs that are merged in.
• https://github.com/clj-kondo/clj-kondo/issues/1855: accept symbol in addition to keyword in clojure.spec.alpha/def name position
• https://github.com/clj-kondo/clj-kondo/issues/1844: support extra schema in schema.core/defrecord
• https://github.com/clj-kondo/clj-kondo/issues/1720: prevent parse error on defmulti without args
2022.10.14
• https://github.com/clj-kondo/clj-kondo/issues/1831: Add :redundant-fn-wrapper support for keyword and binding calls (https://github.com/NoahTheDuke)
• https://github.com/clj-kondo/clj-kondo/issues/1830: Fix warning on :include-macros in .cljs and .cljc for :unknown-require-option linter. (https://github.com/NoahTheDuke)
• https://github.com/clj-kondo/clj-kondo/issues/1238: Build a linux/aarch64 executable in CI (https://github.com/cap10morgan)
• Add :exclude option to :unknown-require-option
• Enable :unused-value by default
• Publish .sha256 files along with released artifacts#2022-11-0217:34ChaseRelease link: https://github.com/clj-kondo/clj-kondo/releases/tag/v2022.11.02#2022-11-0304:30Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.11.1.1189 is now available
• https://clojure.atlassian.net/browse/TDEPS-233 bash script fixes from stale jar check changes
• Add some missing items on help and man page#2022-11-0314:29borkdudedeps.clj updated
https://github.com/borkdude/deps.clj/blob/master/CHANGELOG.md#v11111189
cc @U015879P2F8#2022-11-0320:11borkdude@U015879P2F8 cool, I see it's automated :)
https://github.com/casselc/clj-msi/releases/tag/v1.11.1.1189#2022-11-0320:12borkdudeand this was also automated:
https://github.com/littleli/scoop-clojure/commit/d0def1ee2abd1ab7eed4686d40a4b67e9950b2b8
right @UBLU3FQRZ?#2022-11-0320:13borkdudethis one will probably be updated soon via a daily cron job:
https://github.com/littleli/scoop-clojure/blob/master/bucket/clj-msi.json#2022-11-0320:13chuckleheadI think there was a small issue with the version checking earlier, not sure if they've had a chance to fix#2022-11-0320:14borkdudethey = @UBLU3FQRZ?#2022-11-0320:14chuckleheadsorry, yes#2022-11-0320:14borkdudecool#2022-11-0321:09littleliI have an open PR, but checkver is failing. May happen I won't make it today :-/ Also I'm on a business trip only with my Macbook.#2022-11-0321:10littleli...I'm referring to clj-msi + scoop release here#2022-11-0321:18borkdudeno problem!#2022-11-0322:19littleliscoop install clj-msi
to install with an unofficial msi installer should work now too.#2022-11-0305:18Alex Miller (Clojure team)https://github.com/clojure/tools.build 0.8.4 is now available
• Same as 0.8.3 but now available as a Maven artifact at org.clojure/tools.build#2022-11-0310:13scarytomhas the maven artifact been published yet? I can't see it in central https://search.maven.org/search?q=a:tools.build#2022-11-0311:52Sam RitchieLooks like it’s there now!#2022-11-0312:40scarytomIndeed it does: great stuff#2022-11-0414:48nonrecursiveFirst release of https://github.com/donut-party/dbxray - get metadata for JDBC dbs and use that to generate basic specs or schemas. Huge thanks to @seancorfield for next-jdbc, which this relies on, and whose source code helped me figure out how to work with jdbc. Also thanks to @mpoffald for contributing and helping me think it through.
I’m going to be demoing this https://www.meetup.com/london-clojurians/events/288750683/#2022-11-0415:10Noah Bogartyooooooooo this is sick#2022-11-0415:16Noah BogartOne of my favorite parts of rails is schema.rb which acts as a canonical in-code representation of the database, which makes checking "how is this all connected?" as simple as reading a single file (instead of sending multiple queries in a database repl and figuring it out yourself). This pretty neatly solves that problem if you use a wrapper around a migration library (like migratus)#2022-11-0415:28nonrecursiveyes! That’s something I miss from rails too. I really like that idea#2022-11-0415:40Noah BogartIs it possible to use clojure.java.jdbc? We've not begun switching over yet#2022-11-0415:41borkdudeyou can use both side by side without having conflicts AFAIK#2022-11-0415:43Noah BogartThat's true#2022-11-0415:47tolitius@U0AQ1R7FG noice!
would be great to be able to https://github.com/donut-party/dbxray/blob/1d84500c9693ab806414128905aae844614675dd/src/donut/dbxray.clj#L31 a schema name#2022-11-0415:49nonrecursivehmm yeah xray could take an optional second argument, an adapter config that’s merged with the default#2022-11-0416:12nonrecursive@U0541KMAZ ok I threw that in without really checking it but I think it should work 😅#2022-11-0416:14dharriganamazing work!#2022-11-0416:21kennytiltonLove the name!#2022-11-0416:28seancorfield> Is it possible to use clojure.java.jdbc? We've not begun switching over yet
We have both in our codebase at work. We create a HikariCP connection pooled datasource from our db-spec hash map at startup and then pass {:datasource cpd} around our code as db-spec. That works as-is with c.j.j and, since next.jdbc 1.2.790, that also works as-is so it's easy to use the two together while you migrate. Prior to that, when we called next.jdbc we passed (:datasource db-spec).
Just bear in mind that c.j.j's default is rs/as-unqualified-lower-maps in next.jdbc unless you also change the code to handle the results (which we mostly did not do). So you can easily switch one call at a time.#2022-11-0417:07tolitius@U0AQ1R7FG yep, https://clojurians.slack.com/archives/C06MAR553/p1667576944769159?thread_ts=1667573312.021829&cid=C06MAR553 to create the schema!
https://github.com/donut-party/dbxray/blob/a3bd2cb391e040ed0d5d51d0374d387d26a8aef1/src/donut/dbxray/generate/malli.cljc#L18 might need to only take the “`table-name`” once though?
=> (csk/->PascalCaseSymbol :foo)
Foo
=> (csk/->PascalCaseSymbol :foo :foo)
Execution error
No value supplied for key: :foo
#2022-11-0418:49nonrecursivewhoops thanks, good catch!#2022-11-0419:09nonrecursivethank you @U11EL3P9U and @U0PUGPSFR 🙂#2022-11-0419:50richiardiandreawoooo man this is awesome!#2022-11-0420:08nonrecursive😊 thanks! @mpoffald helped me with it. I hope it’ll be useful for people!#2022-11-0420:33Ben SlessSo cool!
One of the things which was on my list of "when I get to it or get angry enough"
Thank you!#2022-11-0420:41Ben SlessTiny suggestion regarding malli schema: emit a registry and not def forms?#2022-11-0420:42nonrecursivehmm what do you think of having both? generate-defs generate-registry#2022-11-0420:43Ben SlessI certainly see no reason to object 🙃#2022-11-0420:44Ben SlessNow imagine plugging this in to clerk, portal, etc 👀#2022-11-0420:51Ben SlessYou made a db explorer, buddy. Or at least the building blocks for one. Congrats 🙂#2022-11-0420:52Ben SlessYou can also write a db client. A desktop client. With membrane!#2022-11-0421:03nonrecursiveI think that would be super dope!#2022-11-0418:11alexyakushevClojure Goes Fast has kickstarted its new shiny knowledge base with detailed documentation on clj-async-profiler. Basically, everything from the blog posts got restructured, edited, and revitalized, and some fresh guides were added. http://clojure-goes-fast.com/kb/profiling/clj-async-profiler/#2022-11-0421:22nonrecursiveFirst* release of https://github.com/donut-party/datapotato, a library for handling database fixtures for tests! It’s great for making tests clearer, more concise, and easier to maintain, and it has integrations for next-jdbc, XTDB, and datomic.
*datapotato is a fork of https://github.com/reifyhealth/specmonstah and should be 100% backwards-compatible (you should only need to change your namespace requires). datapotato provides better interfaces for the intended use case, and it should be easier to get productive with it#2022-11-0421:52nonrecursiveYou can use https://github.com/donut-party/dbxray to help you get started with datapotato - dbxray can generate the clojure specs / malli schemas you need to generate data, plus the “potato schema” datapotato needs to handle entity hierarchies#2022-11-0505:40Ben SlessReally went looking for a "Because I'm a potato" quote in the readme 😄#2022-11-0514:36athosPostmortem https://github.com/athos/Postmortem/releases/tag/0.5.2 is out. Postmortem is a simple debug library for Clojure(Script) that features data-oriented logging and tracing.
0.5.2 added support for Babashka.#2022-11-0600:55seancorfieldHoneySQL -- Turn Clojure data structures into SQL -- com.github.seancorfield/honeysql {:mvn/version "2.4.947"} -- https://github.com/seancorfield/honeysql -- this is a fairly release in terms of impact and focuses mostly on improving DDL support:
• Fix https://github.com/seancorfield/honeysql/issues/439 by rewriting how DDL options are processed; also fixes https://github.com/seancorfield/honeysql/issues/386 and https://github.com/seancorfield/honeysql/issues/437; Whilst this is intended to be purely a bug fix, it has the potential to be a breaking change -- hence the version jump to 2.4!
• Fix https://github.com/seancorfield/honeysql/issues/438 by supporting options on TRUNCATE.
• Address https://github.com/seancorfield/honeysql/issues/435 by showing CREATE TEMP TABLE etc.
• Fix https://github.com/seancorfield/honeysql/issues/431 -- WHERE false differed between the DSL and the where helper.
• Address https://github.com/seancorfield/honeysql/issues/430 by treating :' as introducing a name that should be treated literally and not formatted as a SQL entity (which respects quoting, dot-splitting, etc); this effectively expands the "escape hatch" introduced via https://github.com/seancorfield/honeysql/issues/352 in 2.2.868. Note that the function context behavior formats as a SQL entity, rather than the usual SQL "keyword", whereas this new context is a literal transcription rather than as a SQL entity!
• Address https://github.com/seancorfield/honeysql/issues/427 by adding set-options!.
• Address https://github.com/seancorfield/honeysql/issues/415 by supporting multiple column names in ADD COLUMN, ALTER COLUMN, DROP COLUMN, and MODIFY COLUMN.
Follow-up in #C66EM8D5H#2022-11-0610:26seriogaassertie — new Clojure(Script) library of assertion macros.
https://github.com/strojure/assertie#2022-11-0622:48niwinzPromesa -- A promise library & async toolkit for Clojure and ClojureScript -- funcool/promesa {:mvn/version "9.0.507"} -- https://github.com/funcool/promesa
Relevant changes:
• Add bulkhead (concurrency limiter) pattern (JVM only for now)
• Add with-executor helper macro for define scoped thread executor for promesa api (experimental), with the ability to optionally shutdown or shutdown&interrupt the executor on the end of scope.
• Add pmap function (analogous to the clojure.core/pmap but a bit simplified and with the ability to set custom executor thanks to with-executor macro or clojure.core/binding) (also experimental).
• Initial support of Loom/JDK19 virtual threads with new helpers: p/vthread-call, p/vthread (macro).
• Documentation improvements and restructuring
• Drop support for JDK<11
In development:
• Channels (intended to be used with virtual threads or standard threads, no go macro)
• Improvements to the bulkhead/concurrency limiter pattern#2022-11-0708:18seancorfieldThe kata-bootstraps repo now has a Clojure CLI / deps.edn project, to go with the Leiningen one it's had for five years https://github.com/swkBerlin/kata-bootstraps/tree/master/clojure#2022-11-0709:58mpenetNew version of https://github.com/exoscale/lingo is out - 1.0.0-alpha24 - It fixes cljs compatibility
Lingo is a pretty printer/"explainer" for clojure.spec errors. It extends explain-data with a lot more information and also provides utilities to generate messages for various contexts#2022-11-0714:56kennytiltonAnnouncing Flutter/MX, https://github.com/kennytilton/flutter-mx/blob/main/README.md, a ClojureDart effort combining the reach of Flutter https://flutter.dev/, the dynamic power of Clojure, and the transparent state management of Matrixhttps://github.com/kennytilton/matrix.
Flutter/MX (`f/mx`) mirrors Dart/Flutter code but simplifies it and handles state seamlessly. Use it for rapid prototyping or, since ClojureDart compiles to Dart, to deploy. Here is the Counter app using f/mx:
(fx/material-app
{:title "Flutter/MX Counter Demo"
:theme (m/ThemeData .primarySwatch m.Colors/blue)}
(fx/scaffold
{:appBar (fx/app-bar
{:title (m/Text "Welcome to Flutter/MX World")})
:floatingActionButton
(cF (fx/floating-action-button
{:onPressed (as-dart-callback []
(mswap! (fm* :z-counter) :value inc))
:tooltip "Increment"}
(m/Icon m.Icons/add .color m.Colors/black)))}
(fx/center
(fx/column
{:mainAxisAlignment m.MainAxisAlignment/center}
(fx/text {:style (p/TextStyle .color m.Colors/black
.fontSize 18.0)}
"You clicked the button this many times:")
(fx/text!
{:style (fx/in-my-context [me ctx]
(.-headline4 (.-textTheme (m.Theme/of ctx))))}
{:name :z-counter
:value (cI 0)}
(str (md/my-value)))))))
MobX fans will appreciate the transparency of Matrix, but Matrix goes even further. "Further" is a tl;dr for another time, but briefly, Matrix takes a "reactive first" approach, wrapping all concerns in a transparently reactive layer of dynamic objects which can be extended in OO prototype fashion. f/mx provides tailored Matrix objects that wrap Flutter widgets, which is why f/mx code looks like Dart code, but simpler and with no apparent state management.
f/mx has successfully achieved "proof of concept". We need to wrap more widgets, and write some doc, but you can explore dozens of demo examples involving animations, tables, forms, snackbars, grids, tabs, a FAB, and more, including a complete implementation of the TodoMVC classic:
(see below)
Besides those examples, the f/mx development team is available for onboarding and help with coding.
If Lisp and Flutter together sound good, ping @hiskennyness here or on the Flutter Community Slack for help getting your ClojureDart or f/mx running.#2022-11-0714:57kennytilton#2022-11-0722:33phronmophobicAnnouncing https://github.com/phronmophobic/clong — a wrapper for libclang and a generator that can turn c header files into clojure apis.#2022-11-0808:41jumarI'm a newbie in this are but how does it compare to {:tag :a, :attrs {:href "https://bugs.openjdk.org/browse/JDK-8282048"}, :content ("https://bugs.openjdk.org/browse/JDK-8282048")} https://bugs.openjdk.org/browse/JDK-8282048 ?#2022-11-0810:36niwinzlooks like it uses that as impl detail#2022-11-0815:39Joshua SuskaloRight now it's primarily using JNA, which does not use the FFI preview. You can see work in #C02EEAUHSJJ to overcome a few bugs which are currently holding that support back.#2022-11-0818:05phronmophobicClong is meant to complement ffi options like JEP422 and JNA. Calling into native code using any ffi option requires knowing the type information of the args/return values which clong can extract from header files. Additionally, clong extracts enums and struct info.#2022-11-0822:48phronmophobicClong will also automatically extract docstrings for functions if a common convention is used.#2022-11-1005:13jumarPerfect, thanks for the additional info.#2022-11-0813:45pezSay hello to @cospaia/prettier-plugin-clojure, a #cljfmt based Prettier plugin for Clojure code. https://github.com/PEZ/prettier-plugin-clojure I need it for a project where indentation has been lost for blocks of code. Where the code blocks are in different languages, Clojure being just one of them. Probably a more serious plugin should be written using zprint and support Prettier and zprint options, but for my use case, this simple plugin is enough.#2022-11-0813:48pezI was surprised to see that the problem of indent-some-code-of-any-language has such a limited selection of solutions. Prettier was the only project I found taking it on. I'm not super happy about having to bring nodejs into the mix, but whatever works, works, I guess.#2022-11-0814:42Noah BogartHey @U0GA10KA8 , did you see this?#2022-11-0814:49zharinovYes, I like it#2022-11-0814:54pez@U0GA10KA8 do I recall correctly you are looking at implementing a Prettier Plugin for Clojure? This one is really simple and stupid, and not really meant to be ”THE prettier-plugin-clojure”. It was just something I need for a project. So many things I don't bother with in this one. 😃#2022-11-0814:55zharinovYeah I see, you've done your MVP faster than me 😂#2022-11-0814:56pezPlease feel free to grab whatever you find useful from this one.#2022-11-0815:01zharinovI was about to start from no-op implementation and provide a mechanism for adding more and more nuances (that leverage Prettier specifics) on top of it. Seems like instead of doing no-op, it's possible to fallback to cljfmt, which makes it usable from day 1.#2022-11-0819:54pezDepends on what your goals are, of course, and what you want to learn. I do think that it is better to base a ”real” plugin on zprint rather than cljfmt (unless you're rolling your own formatter). zprint has a lot of knobs and settings. So you could take this MVP approach using zprint defaults and then step-by-step map Prettier options to zprint settings. And then implement zprint-special options and also support providing those via EDN.#2022-11-0820:00pezI guess a similar approach using cljfmt would also be of value to certain projects. cljfmt is probably the most common formatter after all.#2022-11-0820:03pezIf you're going for speed, neither of cljfmt och zprint is the way to go. On large code bases something much faster would save a lot of time and give faster feedback. Parinfer is probably the fastest indenter out there, but it does only indenting, not any other type of formatting.#2022-11-0916:00zharinovI'm not sure big codebase is the big concern. In practice, the only file you mostly format (via hotkey) is the current one. And also maybe some git pre-commit hook runs locally only for changed files.
On the CI environments, however, formatting check needs to be performed on the whole codebase, but I guess it can be tolerated to be running for up to 30–60 seconds.#2022-11-0916:08pezI happen to know of a codebase where they wish for something much, much speedier than cljfmt.#2022-11-0916:10pezIt is a daunting task to address that issue though. Maybe you can take that on next. 😃#2022-11-0916:10zharinovWell, now you made me wonder what's inside Prettier cache dir 😁#2022-11-0916:42pezHmmm, maybe Prettier is smart about its cache and could help because of that... In this codebase I am thinking about they have some own cache solution and it often gets confused when switching between branches and you end up having to cljfmt everything before commit. Which is a horrible Dx. So maybe, maybe, even if the Prettier plugin have just wrapped cljfmt, it could still improve things...#2022-11-0819:44sheluchinI'm happy to announce the public launch of my first Clojure project. SeqFind is a web service that leverages @borkdude's clj-kondo library to analyze projects in Clojure's ecosystem.
Largely inspired by Eric Normand's article https://ericnormand.me/article/100-most-used-clojure-expressions, SeqFind looks for and reports on the most used namespaces and functions of popular Clojure libraries. The idea is to highlight the parts that are most used in real projects and to show those usages as a means to allow people to learn by example.
At the moment there is a limited number of hand-picked projects listed while I smooth out the details. The goal is to eventually list every library's usages.
There is more information available on the About page. I'd be happy to receive feedback on how to improve this resource for everyone.
https://seqfind.com#2022-11-0820:50phronmophobicWhat data format do you use for the analysis? Is it hard to plug in new repos?
I have a data dump of analyzing 11k repos with clj-kondo, https://blog.phronemophobic.com/dewey-analysis.html#Results#2022-11-0821:13sheluchinI'm storing the analysis results in a SQL DB. I've attached a screenshot of the schema. It's a work in progress as my understanding of Clojure improves. Some bits of the schema were added to make certain queries a little more convenient to access and some of the structure is there because I thought I'd eventually be adding more data in those places. It could probably have a more compact representation and be more normalized.
It's not hard to plug in new repos, but it does take some time. The results are also not perfect, which leads to some findings being omitted due to unsatisfied normalization constraints. When I looked at the failures, most of them seemed to be related to misconfigured clj-kondo hooks in those libraries, leading to mismatches in the usage results.
I'd definitely like to look for more opportunities to use inputs from the community to make improvements. If there's some way to adopt your analysis results (or, conversely, my schema) while still being able to satisfy the core feature set, I'd be up for that. I glanced through the Dewey data some time ago and ultimately decided to do my own ETL, but I will find some time to look at it in more detail.#2022-11-0821:19borkdude@UPWHQK562 This is super cool! :)#2022-11-0821:25sheluchin@borkdude many thanks to you and others in the community creating great tools that make this kind of thing fun to implement 🙂#2022-11-0821:30ericdalloc/c @U066U8JQJ about pathom#2022-11-0821:32ericdallo@UPWHQK562 that's amazing.
Is it possible to spin a separate SeqFinding locally? For example, I'd like to use it at Nubank and see how libraries are used on multiple nubank projects etc#2022-11-0821:34ericdalloAlso, not sure you considered using clojure-lsp dump for that as well, as it has a better understanding of project source-paths automatically#2022-11-0821:36ericdalloit would help fixing some limitations like only supporting deps.edn ATM#2022-11-0821:44sheluchin> Is it possible to spin a separate SeqFinding locally
@UKFSJSM38 at the moment it is not, but providing a companion tool for local usage is something I've thought about a little bit. It could potentially be used to optionally inform SeqFind web about ecosystem developments - like a crowdsourcing helper sort of thing.
> Also, not sure you considered using clojure-lsp dump
I did consider it! I initially had the idea to mirror clojure-lsp's data format as much as possible, but clojure-lsp dump wasn't available when I started this effort. It is very much a direction I would like to explore.#2022-11-0821:46ericdalloAwesome, LMK if need any help, SeqFind looks really great, congrats!#2022-11-0822:00phronmophobicOne of the goals for dewey is to make this sort of analysis available for tool writers. The analysis data does include all the raw info, but in a slightly different format.
If we did achieve some consensus on a particular data schema, I would be happy to adopt it. Ideally, it wouldn't be coupled to any particular database, but could provide tools for easy loading.#2022-11-0822:01phronmophobic@UKFSJSM38, I also wasn't aware of clojure-lsp dump. I'll take a look for the next dewey update.#2022-11-0822:10sheluchin@U07M2C8TT provided some interesting insights into clojure-lsp's approach in this https://clojurians.slack.com/archives/CPABC1H61/p1662144341021069?thread_ts=1662052808.444659&cid=CPABC1H61 a while back. Basically LSP uses its current format because editor integration requires writing new data to be fast so as not to introduce editor lag. In SeqFind's case the needs are somewhat reversed because there are practically no write operations outside of the ETL routines (which can run in the background without degrading user experience) but being able to report on aggregate stats over many projects is a core requirement that clojure-lsp doesn't have.#2022-11-0822:12borkdudeAnd this is why clj-kondo's data export is the way it is: just a few buckets with flat unindexed data, because you can never predict in which way people need to use this data :)#2022-11-0822:14ericdalloYeah, that's why clojure-lsp dump provides clj-kondo analysis and its dep-graph as it is that is what we use internally for editor features, creating a third API would be too much I guess#2022-11-0822:15borkdude@UPWHQK562 You could also consider that people could make an alias in their project :seqfind {...} such that clj -Spath -A:seqfind gives the classpath that should be used for analysis or so. Clerk does something similar#2022-11-0822:16borkdudeor perhaps clj-kondo should support such an alias#2022-11-0822:18borkdudeAnyway, great stuff. As you know, keyword and locals analysis is also available, not sure how useful it would be for this project#2022-11-0822:28lreadVery cool @UPWHQK562!#2022-11-0822:29sheluchinI don't know exactly how locals would fit, but there's probably some way to get value out of it.
I can imagine keyword reporting when considered on a temporal plane ie. "when did a keyword first start getting used?", but that would require doing commit history analysis and would increase complexity quite a bit. Keyword reporting could be particularly useful for libraries that fully qualified keywords in namespaces they control (reverse domain name notation or something). For example, Fulcro RAD uses keywords such as :com.fulcrologic.rad.report/before-load for configuring reports. I can imagine it would be helpful to be able to find usages thereof when figuring out how to use that. I guess just including a robust search might satisfy such use cases though.#2022-11-0822:30phronmophobicI'm extremely interested in a database of specs (and their keywords)#2022-11-0822:33phronmophobicAnother reason to include keywords is that you might be using a web framework like luminus and come across some keyword config and would like some extra docs.#2022-11-0907:26Lidor CohenWow what an idea! Loved it! I love ideas that generate/extract very much needed auxiliaries (docs, specs, examples, tests...) "incidentally" from the main effort (i.e no extra effort for the extra mile) 👏 👏 👏#2022-11-0914:49Noah BogartThis is very cool! One note/thought: The top listed library is clojure itself, and under "namespaces" column says 1140. Is that "number of namespaces within clojure library" or "number of other libraries that use depend on the namespace clojure"?#2022-11-0921:33sheluchin@UEENNMX0T good catch! Definitely a bug because querying the db directly doesn't produce the same result. I will have that patched up for the next iteration. Thanks for pointing it out 🙏#2022-11-0918:00greglookThere's a new 1.1.0 release of [com.amperity/ken](https://github.com/amperity/ken), an observability and tracing library. This release aligns the tracing identifiers and header support with OpenTelemetry's W3 Trace Context standard, making interoperation with other OTel-based tools more plug-and-play.#2022-11-0918:48robert-stuttafordamazing#2022-11-0921:07Mark WardlePleased to announce https://github.com/wardle/hermes, a clojure SNOMED CT terminology server and library, live in use across a number of health care facilities in the World, including the UK. Used as a terminology server, but also embeddable into real-time data pipelines and batch analytics. Rather than the usual approach of creating, and caring for a single terminology server, hermes creates what should be regarded as immutable data files, and you can containerise and switch at the API gateway level, treating terminology resources as cattle, and not pets.
Since I last posted, the important changes are:
• Improved autocompletion results for typeahead functionality for medical terms
• Better support for dimensionality reduction for analytics, including mapping to simple reference sets (subsets) and intersecting a set of concepts with an expression
• Fixes to indexing when source data contains duplicate items in which one relationship is active and another representing the same relations is inactive.
Hermes is a single component of a wider suite of health and care tooling, to which it composes using a graph API (Pathom), but it can be used standalone as a HTTP server, used as a HL7 FHIR terminology server via https://github.com/wardle/hades, as an embedded library with either clojure or java APIs. Most of the heavy lifting is done by lmdb and Apache Lucene.#2022-11-1110:25wotbrewAs I am not a clinician or employed in health a lot of the domain goes over my head - but just wanted to say your stuff is always really nicely organised, documented and the code is clean and clear, therefore I think they could be really nice reference Clojure programs for anyone looking for real-world examples, bravo 👍 ❤️ 👏#2022-11-1115:09Mark WardleThanks! That’s very kind of you to say. #2022-11-0921:55uochanJust released build.edn ver 0.8.174, Library making your Clojure library build process easy.
https://github.com/liquidz/build.edn
Added version operation like "bump-major-version"#2022-11-1009:47robert-stuttafordnice work here @UBL24PLE6!
for new Clojure users, it would be beneficial to understand what build.edn does differently to the other options in this space e.g. https://github.com/clojure/tools.build / https://github.com/seancorfield/build-clj, or just using plain old deps.edn + CLI.
trade-offs, founding principles, etc#2022-11-1211:03niwinzPromesa -- A promise library & concurrency toolkit for Clojure and ClojureScript -- funcool/promesa {:mvn/version "9.1.536"} -- https://github.com/funcool/promesa
Relevant changes:
• Channels & CSP pattern -- Experimental, JVM only, core.async alternative and similar API, that laverages Virtual Threads -- https://funcool.github.io/promesa/latest/channels.html#2022-11-1216:27Asko Nōmmhttps://github.com/askonomm/sember v0.0.12 - A one-file static site generator for the individual
> Sember is a one-file static site generator. If you're like me then you're probably tired of tinkering with the endless options for themes, changing them, and so on and so forth, and all you want is just a website that works. Well, look no further. All that Sember needs is one file. Simply create a sember.edn file in whatever directory you want, install Sember, and run it in that directory. Woalaa, your generated site can be found in the public/ directory.
This is a quite early release with lots still planned, like showing links elsewhere, generating a CV page (and PDF), etc. Sember is meant to be used as a website that showcasts the individual. Kind of like a business card.#2022-11-1216:38AvelinoWe have a new federation (mastodon) with the face of Clojure, you are all very welcome
I look forward to seeing you all
https://clj.social#2022-11-1309:51magnarsGood idea! 🙂 I just joined, but the frontpage is blank at the moment.#2022-11-1314:00oliver marksnice now we just need some rooms on matrix :)#2022-11-1314:49kennytiltonLet's get this trending! https://clj.social/@kennytilton/109337042722463268 🚀#2022-11-1409:22simongrayAll of the CSS is getting blocked here:
'integrity' attribute for resource '' with computed SHA-256 integrity 'm0ryFWp6tHgRNBNwke1GlnxzD/g94XFN8KHdP/eZack='. The resource has been blocked.
109337042722463268:1 Failed to find a valid digest in the 'integrity' attribute for resource '' with computed SHA-256 integrity 'NBgLHHgo16Oc5wZb35mdz6u1zZKoNGGw837y2xN+ohE='. The resource has been blocked.
109337042722463268:1 Failed to find a valid digest in the 'integrity' attribute for resource '' with computed SHA-256 integrity 'YgEhHmwjKL88zKfUOMt/qRulYurIuHzhn4SZC9QQ5Mg='. The resource has been blocked.
109337042722463268:1 Failed to find a valid digest in the 'integrity' attribute for resource '' with computed SHA-256 integrity 'y3ofvCuP7fCtmfJB2ccDysNmpsf9bcbIUcKapmkjFts='. The resource has been blocked.
109337042722463268:1 Failed to find a valid digest in the 'integrity' attribute for resource '' with computed SHA-256 integrity 'onh6vHxzykkVgJkiww+OCPk0tKC48KMUD9GVJ8/LK
#2022-11-1409:25simongrayfor what it’s worth, I’m https://indieweb.social/@simongray :-)#2022-11-1411:46simongrayCSS seems to be fixed now 🙂#2022-11-1411:48AvelinoI was upgrading to mastodon version 4
https://clj.social/@avelino/109341866679835854#2022-11-1411:52magnarsStill looks like this to me:#2022-11-1413:04simongray@U07FCNURX tried clearing your cache?#2022-11-1413:06magnarsYep, that worked. 👍 I would think that that's what those cache buster file endings are for, tho. 🙃#2022-12-0403:26Avelinowelcome \o/#2022-11-1413:21borkdudehttps://github.com/babashka/sci: Configurable Clojure/Script interpreter suitable for scripting and Clojure DSLs
SCI is used in https://github.com/babashka/babashka, https://github.com/babashka/nbb, https://github.com/nextjournal/clerk, https://github.com/BetterThanTomorrow/joyride/ and many https://github.com/babashka/sci#projects-using-sci projects.
0.5.35 - 0.5.36 (2022-11-14)
• https://github.com/babashka/sci/issues/817: mutation of deftype field should be visible in protocol method
• https://github.com/babashka/sci/issues/816: restore recur target exception in do
• https://github.com/babashka/sci/issues/819: don't use metadata in record implementation
• https://github.com/babashka/sci/issues/831: preserve location of throw in stack trace
• Drop name metadata from conditionally defined var
• Implement in-ns as function rather than built-in (https://github.com/SignSpice)
• https://github.com/babashka/sci/issues/832: reload analyzer API within CLJS to ensure ns-publics and resolve are available
• Optimize analysis and evaluation of fn
• Add more docstrings to built-in (core) macros and vars (https://github.com/mhuebert)
• Add array
Channel: #sci#2022-11-1421:25Anders EknertI needed https://jsonpatch.com/ functionality for the Jarl project, but found the current libraries had a few things missing (hard JSON library dependency, not working with ClojureScript, etc), so I hacked up my own. Just released https://github.com/borgeby/clj-json-pointer version 1.0.0! No external dependencies, ClojureScript support, passing all the tests from the JSON Patch conformance suite.#2022-11-1422:09Sam RitchieI don’t have a project comparison but this made me think of https://github.com/juji-io/editscript#2022-11-1422:13Anders EknertThanks! Looks useful, although for this project I needed JSON Patch support specifically. But may very well try that for other projects 🙂#2022-11-1613:02mynomotoI have https://github.com/daviddpark/clj-json-patch on my bookmarks, hopefully you were aware of that one.#2022-11-1613:03Anders EknertYep! That’s the one I started out with.#2022-11-1502:03greglookI've been playing with tools.deps recently and updating some of my projects as a way to learn the new tools better. A long, long time ago I wrote lein-hiera as one of my first Leiningen plugins, to help me understand the structure of my code. I've rewritten lein-hiera (now clj-hiera) so that it's primarily a simple library namespace which is easy to consume from the clj CLI as either a gitlib or as a stand-alone "tool". The plugin just bundles the library code now and does some lightweight wrapping to make the lein hiera command work. If you've ever wanted a graph of your namespace dependencies, give it a shot!
https://github.com/greglook/clj-hiera#2022-11-1502:36Alex Miller (Clojure team)very cool! worked for me, but seems like it uses your default :sources instead of the :paths from your deps.edn (for me it scooped in my tests too - which are both under src/ in standard maven layout)#2022-11-1502:57greglookAh, yeah the non leiningen default is a naive #{"src"} - open to making that smarter#2022-11-1510:37borkdudehttps://github.com/borkdude/rewrite-edn: utility lib on top of https://github.com/clj-commons/rewrite-clj with common operations to update EDN while preserving whitespace and comments.
0.4.5
• Add conj: (str (r/update (r/parse-string "{:a [1 2 3]}") :a r/conj 1)) ;;=> "{:a [1 2 3 1]}" (https://github.com/zerg000000)
• Add fnil: (str (r/update (r/parse-string "{:a [1 2 3]}") :b (r/fnil r/conj []) 1)) ;;=> "{:a [1 2 3] :b [1]}"
#2022-11-1514:57Alex Miller (Clojure team)Set of releases to add support for repository policies in deps.edn:
• https://github.com/clojure/tools.deps.alpha 0.15.1254
• https://github.com/clojure/tools.tools v0.2.9
• https://clojure.org/releases/tools#v1.11.1.1200 1.11.1.1200
• https://github.com/clojure/tools.build v0.8.5 9c738da#2022-11-1515:00Alex Miller (Clojure team)In most cases, the default policies are fine, but if you need this, an example of how this looks:
{:mvn/repos
{"my-releases" {:url ""
:snapshots {:enabled false}
:releases {:enabled true
:update :daily
:checksum :fail}}}}
These policies will be output with -Spom or -X:deps mvn-pom or write-pom in tools.build when generating a pom.xml.
More docs here: https://clojure.org/reference/deps_and_cli#_maven (although I see the bullet formatting is off, so fixing that still)#2022-11-1517:05borkdudehttps://github.com/borkdude/deps.clj/releases/tag/v1.11.1.1200#2022-11-1519:13richiardiandreaReleasing our first library here at Cohesic!
It is a set of helpers for XTDB, especially around undo/revert of an entity
https://github.com/cohesic/cohesic-xtdb
https://cohesic.github.io/cohesic-xtdb/#2022-11-1608:17Christian Johansenm1p (short for “map” in the tradition of i18n) is a map interpolation library that can be used for i18n (or just externalizing textual content for a single language), theming, and similar use cases. It takes a data-driven approach to “flavor content”, allowing you to completely separate app logic from the mechanics of i18n/theming/etc, and supports arbitrary dictionary data, custom “dictionary functions” and more.
More details in the Readme: https://github.com/cjohansen/m1p#2022-11-1616:37Noah BogartThis name is so clever#2022-11-1610:04borkdudeBabashka https://github.com/babashka/fs: file system utility library for Clojure
v0.2.12 (2022-11-16)
• https://github.com/babashka/fs/issues/73: add write-bytes and write-lines
• https://github.com/babashka/fs/issues/77: add update-file
Channel: #babashka
https://github.com/babashka/fs/blob/master/CHANGELOG.md#v0212-2022-11-16#2022-11-1614:44jpmonettasHi everybody! Just released Hansel 0.1.17 (https://github.com/jpmonettas/hansel)
Hansel allows you to instrument Clojure[Script] forms and entire namespaces so they leave a trail when they run.
It is the original flow-storm instrumentation code, moved into a separate library so we can build more tooling that depends on instrumentation
without depending on the entire flow-storm debugger.
The readme is still pretty rough so let me know if you are interested or show up in the #C03KZ3XT0CF channel.#2022-11-1723:47mauricio.szaboThis is SO COOL, thanks for publishing this!#2022-11-1614:48jpmonettasI just released FlowStorm debugger 3.2.271!
FlowStorm is a Clojure and ClojureScript debugger with some unique features.
The most important thing about this release is that it uses Hansel for instrumentation.
Hansel code has more testing and a bunch of improvements which should make instrumentation better specially in ClojureScript.
Apart from that, the release contains a couple of new features, fixes and changes :
• New tap button allows you to tap> any value from the UI (nice to integrate with other tooling like portal)
• New locals "tap value" allows you to tap> any locals
• Value inspector navigation bar now shows keys instead of val text (which I think is much nicer)
• Fix automatic [un]instrumentation watcher (helps with synchronization when you are instrumenting from the browser and also with #trace)
Repo : (https://github.com/jpmonettas/flow-storm-debugger)
Channel: #flow-storm
Cheers!#2022-11-1622:05javahippiePublished clj-test-containers 0.7.4 to upgrade to the latest testcontainers-java version, along with some smaller technical changes and documentation fixes:
https://clojars.org/clj-test-containers#2022-11-1715:15athosJust released https://github.com/athos/pogonos 0.2.1! Pogonos is yet another Clojure(Script) implementation of the Mustache template language.
0.2.1:
• Support dynamic partials, a new feature introduced in the Mustache spec https://github.com/mustache/spec/releases/tag/v1.3.0
• Support running on Babashka
• Add a new pgns command, which is installable via https://github.com/babashka/bbin#2022-11-1719:50dvingoNew release of my ClojureScript wrapper of the emotion css-in-js lib https://emotion.sh/docs/introduction
https://github.com/dvingo/cljs-emotion version "2022-11-17.0.0"
Notable change is the addition of :css prop (https://emotion.sh/docs/composition) support to helix.dom
(require [dv.emotion-helix-dom :as d])
(d/p {:css {:background "blue" ":hover" {:background "grey"}} "Hello")
See the readme and devcards for more:
https://dvingo.github.io/cljs-emotion/#!/dv.cljs_emotion.helix_cards#2022-11-1804:07Cora (she/her)heck yes, this is great#2022-11-1723:47mauricio.szaboFolks, this will be a really weird announcement: I'm publishing a pretty initial version of a plug-in called https://github.com/mauricioszabo/generic-lsp for the Pulsar editor.
What is Pulsar, you say? Well, Atom is dying a fast death now, so some community members (me included) decided to keep the project alive. As we're still reimplementing most features of the old packages API, I also implemented a way to install packages directly from git repos.
So, back to generic-lsp, is a package to support LSP servers in Pulsar. It has a pretty good support for Clojure-LSP, an ok-ish support for Javascript, C/C++ (Clangd), Rust, and Lua. It can use (but don't actually require) the packages Linter, Linter-UI-Default, Intentions and Datatips to do more magic stuff. You can install with pulsar --package install -t v0.1.3, after you grab one of the editor's binary from our CI (https://cirrus-ci.com/github/pulsar-edit/pulsar/master)#2022-11-1723:54seancorfieldgit-based package management -- I like it!#2022-11-1814:38mauricio.szaboWell, Atom already had that, but probably was for some internal usage because it tried to handle some very weird cases and installed a bunch of weird dependencies. It also didn't support tags, so I basically re-purposed the command and now things work just fine 🙂.#2022-11-1820:47athomasoriginalThis is great. Thanks @U3Y18N0UC for keeping Atom alive. I've switched over to nvim, but I will for sure check this out because Atom used to be my daily.#2022-11-1901:23uochanJust released antq ver 2.2.962 Tool to point out your outdated dependencies.
https://github.com/liquidz/antq
Added support for :antq/exclude metadata to exclude specific dependencies#2022-11-2013:02slipsetFinally got around to publish a new version of hickory under the clj-commons org.
https://clojars.org/org.clj-commons/hickory
Thanks a lot to @borkdude for helping out with porting the build from the old stuff to the new stuff#2022-11-2021:47borkdudehttps://github.com/babashka/nbb: Scripting in Clojure on Node.js using https://github.com/babashka/sci
v1.1.146 released with exposed nREPL server API.
You can now start an nREPL server from within a Node.js process, connect over the the network and evaluate / inspect stuff :-)
See docs: https://github.com/babashka/nbb#nrepl-apihttps://t.co/ceorfx0Gpu
Full changelogs https://github.com/babashka/nbb/blob/main/CHANGELOG.md - previously announced release here was 1.0.136
Channel: #nbb#2022-11-2112:36borkdudehttps://github.com/borkdude/edamamev1.0.16
Configurable EDN/Clojure parser with location metadata
• Fix https://github.com/borkdude/edamame/issues/93: read-cond assumes LineNumberingIndexReader
• Optimization: reset source logging buffer when reading source
Channel: wherever you can reach me and in doubt #borkdude-misc ;)#2022-11-2207:17flowthingMitchell Hashimoto has Hashicorp, so… how about “Borkcorp” (and hence #borkcorp)? I think it has a pretty nice ring to it. “Purveyors of fine open-source Clojure software.” 🙃#2022-11-2121:48hlshipPedestal 0.5.11-beta-1
Pedestal is a set of batteries-included libraries for building HTTP-based services and applications.
We are pleased to announce the first beta of Pedestal 0.5.11; this release primarily addresses
out-of-date dependencies and security issues.
Documentation: http://pedestal.io/
GitHub page: https://github.com/pedestal/pedestal
Significant changes:
- Now built using deps.edn
- pedestal-jetty: Upgraded version of Jetty to 9.4.48.v20220622 to address known CVEs
- Bumped many other dependencies for security and compatibility with Clojure 11
- pedestal-log: Fixed issues that made it difficult to override the built-in implementation of logging
- pedestal-jetty: Removed blocking I/O inside a go block when using a WebSocket connection
https://github.com/pedestal/pedestal/milestone/11?closed=1#2022-11-2121:53Eugengreat to see this moving forward.#2022-11-2121:55Eugenany plans to use newer jetty versions? 10 - 11 (uses jakarta API) ?
https://github.com/pedestal/pedestal/issues/722#2022-11-2121:59hlshipShort answer: Yes.
Long answer: We decided to prioritize getting a release out with fixes for known CVEs before coming up with a longer range strategy for supporting newer versions of Jetty.#2022-11-2122:01hlshipWe (myself and @U0FRJF287) are very excited to revitalize Pedestal and its documentation.#2022-11-2122:07Eugensounds great#2022-11-2122:08Eugenloking further for future releases#2022-11-2122:09Eugenwould love to test a release with version 10.x#2022-11-2219:59Alex Miller (Clojure team)This is a new release of a collection of datafy/nav helpers for working at the REPL. If you connect your REPL to a datafy/nav enabled viewer (e.g. https://docs.datomic.com/cloud/other-tools/REBL.html), you might find it useful. Currently has support for bytebuffers, threads, sockets, core.async, and reify; also helpers for writing your own datay/navs:
https://github.com/Datomic/dev.datafy v0.1#2022-11-2220:04mkvlrthanks for sharing!#2022-11-2220:23seancorfieldNice. Should the :git/url be https:// format rather than {:tag :a, :attrs {:href "/cdn-cgi/l/email-protection", :class "__cf_email__", :data-cfemail "b0d7d9c4f0d7d9c4d8c5d29ed3dfdd"}, :content ("[email protected]")}? Plus also maybe a warning about wanting to exclude org.slf4j/slf4j-nop to avoid clobbering people's logging?#2022-11-2220:26Alex Miller (Clojure team)sure, I'll mention that to Stu#2022-11-2220:33Alex Miller (Clojure team)not sure what uses slf4j?#2022-11-2220:34Alex Miller (Clojure team)https://github.com/Datomic/dev.datafy/blob/main/deps.edn#2022-11-2220:48seancorfieldAh, my bad. I just used add-libs to bring in a bunch of stuff including that new lib and assumed that it was this that brought in the nop lib since I thought this was the only lib that got added... so maybe something else is bringing that in. Sorry.#2022-11-2320:13Daniel JompheSeems intriguing. I hope we'll see some live usage of this in the next weeks/months to understand what it gives in practice. We used to have Portal setup in our project but nobody used it. We'll surely revisit this all...#2022-11-2320:22seancorfield@U0514DPR7 I live and die inside Portal all-day, every-day! 🙂#2022-11-2312:43borkdudehttps://github.com/babashka/scittle: execute Clojure(Script) directly from browser script tags via SCI!
v0.4.11 (2022-11-23)
• Add scittle.re-frame plugin. This gives access to the https://github.com/day8/re-frame library.
• Fix for https://github.com/babashka/scittle/issues/44: Honoring SCITTLE_NREPL_WEBSOCKET_PORT in scittle.nrepl
• Add all public vars of cljs-ajax ajax.core
• Upgrade several built-in libraries
Check https://babashka.org/scittle/codemirror.html for a playground where you can try out the new re-frame plugin.
Channel: #C034FQN490E#2022-11-2315:11joost-diepenmaatThis is the first release of https://git.sr.ht/~jomco/select-tree — similar to select-keys but selects in a nested collection.#2022-11-2315:13Noah BogartThat's pretty cool. I'm a little surprised that nil means "select all" instead of "select none". Any particular reason for nil instead of true or something else?#2022-11-2315:18joost-diepenmaatThat’s good feedback, thanks. My thinking was something like “nil means make no selection; do nothing; just keep what’s there”.#2022-11-2315:18Noah BogartAh yeah, that makes sense. I've been dabbling in Lua recently so I've been in the mindset of "a nil value removes the key" lol#2022-11-2315:19joost-diepenmaatI don’t think true really captures that either.#2022-11-2315:19borkdudeI was also expecting that nil would mean "remove" or so#2022-11-2315:19borkdudeI've used true as the "everything" value for things like this too#2022-11-2315:20joost-diepenmaatselect-tree works like an “allow list”, so you never have to explicitly remove keys. I could add true for this case if it’s less confusing, maybe#2022-11-2315:20borkdudeyes, I understand: but principle of least surprise you know#2022-11-2315:21borkdudeI've written a function like this so people could filter out stuff from HTTP responses, kind of like a graphql after the fact ;)#2022-11-2315:23joost-diepenmaatYeah. one of our use cases is to “redact” http data to make it leak less data when logging and also to make it easy to compare “live” responses to expected / recorded data.#2022-11-2315:23pithylessConsider a more dynamic case:
(select-tree data {:foo (when ,,,)})
if there is no way to specify a negative-selection, then you're back to using some kind of cond-> to build the selector dynamically (since you need to dissoc keys, instead of just passing in e.g. nil , false or [] as the value)#2022-11-2315:23borkdudein my use case people could provide such a structure as one of the optional request body fields, to just get less data over the wire#2022-11-2315:25borkdudeThe notation I had for that, if I remember correctly (the code I wrote I no longer have):
{:library-name/default true
:foo false}
so it would select all the fields except :foo#2022-11-2315:26joost-diepenmaat@U05476190 I’ve thought about something like that a bit, but I haven’t really found an actual use-case yet. Do you have an example in mind?#2022-11-2315:26borkdudeThe use case is to not have to explicitly spell out the things you want to have but just specify what you don't want to have#2022-11-2315:27borkdudeif you have a large set of fields but one field contains a giant blob you're not interested in, it's handy to be able to say: leave this one out#2022-11-2315:27joost-diepenmaatI’m not sure if I really do want to support that, but I will think about it.#2022-11-2315:28borkdudewell, it's a 10 line function so it's easy enough to write your own ;)#2022-11-2315:29pithylessI just think that if the syntax was true for "select all", and nil/`false` for "select none" -> then it doesn't really hurt the spirit of the library, but supports all the potential cases mentioned in this thread.#2022-11-2315:29borkdudeexactly#2022-11-2315:31joost-diepenmaatExcept that having {:key false} is the same as not providing the key at all. Unless you’re working on sequential collections….#2022-11-2315:31joost-diepenmaatAh right I see what you mean @U05476190#2022-11-2315:33pithyless@U09N5N31T as to the use-cases, I can think of two examples:
1. many times I need to forbid certain keys more often than explicitly allow (in the spirit of Clojure open maps)
2. just tangentially related, but there is a certain nice developer experience I found in frontend libraries when they assume something like:
:classes ["some" "strings" (when visible? "optional")]
^ it seems like a simple thing, but this is really useful vs the alternative of filtering out the nils, etc. and joining the string explicitly#2022-11-2508:26henrikCool! Have you considered EQL syntax?
The example on the page would be:
(select-tree ring-request
[:request-method
:uri
{:headers ["content-type"]}
{:params [:pageNumber
:pageSize]}])
If you wanted to select all headers, you would:
(select-tree ring-request
[:request-method
:uri
:headers
{:params [:pageNumber
:pageSize]}])#2022-11-2412:01olttwa📢 https://github.com/nilenso/goose/releases/tag/0.3.0 is out! 🎉 Goose is a background processing library for Clojure, made by nilenso.
Message brokers are now pluggable 🔌! This version comes with support for RabbitMQ (0.2 only had Redis support), and lays down a protocol that allows you to integrate any backend like Postgres, Datomic or SQS.
We also added some features based on the feedback from 0.2:
• Periodic/Cron-style Jobs
• Custom Metrics backend (StatsD, Prometheus, Metrics, etc.)
• A new logo! goose
You can https://github.com/nilenso/goose#getting-started with the Readme, or dig into details with the https://github.com/nilenso/goose/wiki/. You can also ping us on #C03RCGK0P8S.#2022-11-2517:56mpenetFirst release of https://helidon.io/nimaring adapter for clojure https://github.com/mpenet/nima. It's based on their alpha2, so here be dragons. #2022-11-2518:56MattiasHi, what is Helidon and/or Nima? Thanks! 😊#2022-11-2519:01mpenetHelidon is a framework to write « microservices » https://helidon.io/nima helidon currently uses netty+reactive-streams internally, nima is a rewrite using loom, initially for their webserver. Tldr: an efficient / lightweight web server (in the case of nima)#2022-11-2603:27valeraukohave you done any benchmarks?#2022-11-2607:27Matthew Davidson (kingmob)Interesting#2022-11-2608:42mpenetNo benchmark yet, it’s still very early (it’s a couple hours worth of work so far and the underlying lib is alpha2). I do tend to write the adapter with performance in mind tho. But that will come eventually.#2022-11-2608:44mpenetThey claim comparable/slightly-better perf as their netty/reactive based server in a presentation they did on alpha1, but I would take with a grain of salt.#2022-11-2608:44mpenetThey do work with the loom team on the implementation, I guess that helps#2022-11-2719:36Alex Miller (Clojure team)• https://github.com/clojure/tools.analyzer 1.1.1 - replaces small bit of interop to make this usable from ClojureCLR
• https://github.com/clojure/tools.analyzer.jvm 1.2.3 - bumps tools.analyzer dep#2022-11-2801:00Matthew Davidson (kingmob)True Grit 2.0.21 is now available! Your one-stop shop for adding resilience to your fns: circuit breakers, retries, bulkheads, timeouts, and rate limiters galore!
I've bumped it up to 2.x to match the 2.x change in the underlying Resilience4j lib, but the API is completely backwards-compatible. The only breaking change is Resilience4j 2 now requires JDK 17+, so True Grit does too.
True Grit now uses the MIT License.
https://clojars.org/net.modulolotus/truegrit#2022-11-2815:53pez#joyride - An extension making VS Code hackable (in an almost Emacs sense of the word) was just updated - v0.0.25. Since last announcement we have the following changes:
• Better performance (by using latest SCI)
• Fix: https://github.com/BetterThanTomorrow/joyride/issues/108
• https://github.com/BetterThanTomorrow/joyride/issues/106
• https://github.com/BetterThanTomorrow/joyride/issues/102
• https://github.com/BetterThanTomorrow/joyride/issues/98`runCode`https://github.com/BetterThanTomorrow/joyride/issues/98
• https://github.com/BetterThanTomorrow/joyride/issues/92
(And quite a few more fixes.) We will demo some of this https://www.meetup.com/london-clojurians/events/286030325/.#2022-11-2816:41oliyHi all, martian 0.1.22 has been released.
martian is a library providing abstraction over your http client, supporting Swagger, OpenAPI and your own custom definitions.
https://github.com/oliyh/martian
This release adds support for:
• date-time and int-or-string string formats https://github.com/oliyh/martian/pull/155, thanks https://github.com/jcdlbs
• Objects with no properties (implicitly anything) and associated additionalProperties support https://github.com/oliyh/martian/pull/156, thanks https://github.com/jcdlbs
• hato client in martian-test https://github.com/oliyh/martian/pull/158, thanks https://github.com/bombaywalla
• cljs-http-promise in martian-test https://github.com/oliyh/martian/pull/159
This release fixes:
• The cljs-http stub responder in martian-test now returns a proper asynchronous contex https://github.com/oliyh/martian/pull/159
This release improves:
• The martian-test code example in the README https://github.com/oliyh/martian/pull/152, thanks https://github.com/rkirchofer
• The respond-with (replacing respond-with-constant) function in martian-test now accepts functions as well as values https://github.com/oliyh/martian/pull/159
#2022-11-2819:17lilactownAnnouncing the first release of https://github.com/lilactown/helix-spec-alpha, a library for writing specs for React components defined using https://github.com/lilactown/helix.
Some areas of exploration/experimentation that this opens up:
• Instrumenting components at dev time and getting errors when they are passed invalid props
• Generative testing of components using test/check
• Integration with static analysis frameworks for checking props usage
Currently available via git deps#2022-11-2914:20practicalli-johnLibrary updates for the user level aliases in https://github.com/practicalli/clojure-deps-edn - providing easy access to a wide range of community tools for use with Clojure CLI (deps.edn) projects
See the https://github.com/practicalli/clojure-deps-edn/blob/live/CHANGELOG.org for specific version changes
Also streamlined the GitHub actions in the workflow checks (eventually all the checks will all be done in MegaLinter)#2022-11-2917:48Eric ScottVersion 0.2.0 of https://github.com/ont-app/vocabulary has been released#2022-11-3006:29mpenethttps://github.com/mpenet/mina 0.1.6 is now on clojars (previously was only via git deps, the repo name also changed)#2022-11-3013:41borkdudehttps://github.com/babashka/babashka: Native, fast starting Clojure interpreter for scripting
1.0.167: the ultimate Advent of Code edition! babashka
See the https://blog.michielborkent.nl/babashka-test-runner.html blog post for how to run tests with this release.
You can do this without having https://github.com/babashka/spec.alpha in your bb.edn
$ bb -e "(require '[clojure.spec.alpha :as s]) (s/valid? int? 2)"
true
Most significant changes since 1.0.165, the last release mentioned here:
• Compatibility with Cognitest https://github.com/cognitect-labs/test-runner and https://github.com/clojure/tools.namespace
• Add run-test and run-test-var to clojure.test
• https://github.com/babashka/babashka/issues/1433: spec source as built-in fallback. When not including the https://github.com/babashka/spec.alpha fork as a library, babashka loads a bundled version, when clojure.spec.alpha is required.
• SCI: performance improvements
• Better error locations for interop (https://github.com/bobisageek)
• Use namespace-munge instead of munge for doing ns -> file lookup
https://github.com/babashka/babashka/blob/master/CHANGELOG.md
Channel: #babashka#2022-11-3014:39Sigge LaborHello!
We created a library to use https://heroicons.com as reagent components. It follows the versioning of the heroicons library itself.
https://github.com/scrintal/heroicons-reagent#2022-11-3020:01oliyI wrote a little 'app' called sanakone a while ago while I was trying to learn Finnish (update: still trying to learn). It has a very basic set of rules for conjugating the different types of Finnish infinitives, and a lightweight cljs standalone webapp. Kinda fun as an example of something small, simple and easily deployed that can be used a bit like a native phone app.
Code is https://github.com/oliyh/sanakone
Demo at https://oliyh.github.io/sanakone/# and bonus points if you learn yourself some Finnish#2022-12-0101:15HuahaiDatalevin 0.6.26 is out. This release added explicit transactions for both Key-value and Datalog API, so that users can write arbitrary code within a single transaction to achieve atomicity, e.g. to implement compare-and-swap. Functions for rollback are also provided. https://github.com/juji-io/datalevin#2022-12-0216:48philippamarkovics🌱 https://github.clerk.garden, a simple publishing space for https://clerk.vision notebooks, is officialy available today! Find out about how it works and how to build and publish your Clerk notebooks at https://github.clerk.garden or head to #clerk-garden for questions and suggestions.#2022-12-0220:26Sam RitchieAnnouncing v0.1.0 of mathlive.cljs ! This library provides a #reagent component wrapping the https://cortexjs.io/mathlive/ equation editor. Enter math in a lovely, easy-to-use editor and extract it as LaTeX, MathJSON and many other formats.
Please give the library a try via the https://mentat-collective.github.io/mathlive.cljs/ written with #clerk.
• Clojars: https://clojars.org/org.mentat/mathlive.cljs
• Github: https://github.com/mentat-collective/mathlive.cljs
• cljdoc: https://cljdoc.org/d/org.mentat/mathlive.cljs/0.1.0
• Interactive docs: https://mentat-collective.github.io/mathlive.cljs/
https://user-images.githubusercontent.com/69635/205183928-e0fb6227-c45c-4db7-982d-c8e8a3cb3ee8.gif#2022-12-0221:12jsa-aerialAs far as you know, will this work in any reagent built cljs frontend?#2022-12-0221:18Sam Ritchie@U06C63VL4 yes it will!#2022-12-0222:00jsa-aerialcould be a nice addition to Saite#2022-12-0222:01Sam Ritchiefor sure. @U06C63VL4 i’m working on a layer beyond this that will parse MathJSON into a proper Clojure expression, so you can define proper functions etc with these fields#2022-12-0222:02jsa-aerialvery nice!#2022-12-0412:48kennytiltonBrilliant!
Have you looked at automatically recognizing simple exponents, so 3-x-2 gets parsed as 3x^2? http://tiltonsalgebra.com/#mathpaper#2022-12-0416:01Sam Ritchie@U0PUGPSFR I like that a lot, and I like your whole site. I’m not sure mathlive can do that out of the box but I’ve asked over at their gitter site, so I’ll know soon! https://gitter.im/cortex-js/community#2022-12-0416:02Sam Ritchieit’s probably something we could rig up in the :on-change handler of course, detecting this and implementing that substitution#2022-12-0416:48kennytiltonOh, I was surfing too casually, did not notice you sit on top of a separate editor! Hope with the RFE pans out! But the code is tricky. eg, if the sequence were 3 x 4 2, we get 3x^42. But after typing the 3x4, the insertion caret stays on the baseline! I have actually toyed with showing two insertion points. 🙂 Fortunately this is just for basic Algebra, so the UX can cater to simpler expressions.#2022-12-0419:41Sam RitchieThe two cursor comment reminds me of this, @U0PUGPSFR: https://www.hogbaysoftware.com/posts/bike-rich-text/#2022-12-0419:41Sam Ritchiesuch a nice idea#2022-12-0420:20kennytiltonBike addresses some serious pain points!#2022-12-0503:23Sam Ritchie@U0PUGPSFR looks like you can do it with onInlineShortcut, see this page and search for the first occurrence of that string https://cortexjs.io/mathlive/guides/shortcuts/#2022-12-1013:59kennytiltonAh, yes:
'eta': {
after:
'nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text',
value: '\\eta',
},
Nice little DSL. I prolly should have done sth like that, that code is a bear! But a static translation will have a problem: in my editor, if we type "x+2" then back up to change to "x-2" and first delete the "+", we get "x2", unconventional but legal, then can type our "-". A static translation of `variable+digit' would convert that to x-squared before I could type the "-"!
FYI, I am thinking of porting my (Common Lisp) maths editor to ClojureDart/Flutter, so I can do sth mathy on mobile. A CLJD version would translate nicely to CLJS.#2022-12-1212:53kennytiltonflutter_tex was straightforward to get working, anyway. Next up is a Common Lisp->Clojure port of the editor.#2022-12-0221:43practicalli-johnPracticalli online books moving to mkdocs and material theme, starting with https://practical.li/neovim/
Content can now be edited directly via the website (via GitHub edit links )#2022-12-0222:28borkdudeLooks awesome, I'm also considering mkdocs-material for #C029PTWD3HR and if that works out, also bb#2022-12-0222:32borkdude@U05254DQM Is this out of date or is it also still using gitbook?
https://github.com/practicalli/neovim/ is written in markdown and uses GitBook to generate the website via a GitHub action.#2022-12-0302:08practicalli-johnOn the contribute page, yes that should be updated. I've done a PR from my tablet using the edit ✏️ link on that page, really quite handy, especially for quick fixes.#2022-12-0419:25borkdudeA fresh release of babashka process!
Clojure library for shelling out / spawning sub-processes
babashka/process {:mvn/version "0.4.13"}
The shell function is now the most emphasized function in the README (where it was previously almost undocumented)
All other functions like process have been updated to support the syntax that shell supports: (shell opts? & args)
This works particularly well with (apply shell "binary" *command-line-args*)
Check out the new README https://github.com/babashka/process
Discuss in #babashka#2022-12-0511:49niwinzA new release of promesa library -- funcool/promesa {:mvn/version "10.0.571"} -- https://github.com/funcool/promesa
A promise library & concurrency toolkit for Clojure & ClojureScript.
Relevant changes (mainly focused on JVM/Clojure):
• Fixes and API stabilization on promesa.exec.csp (channels & csp patterns for Clojure, that leverages vthreads)
• Add mult support to promesa.exec.csp
• Make promesa.exec.csp/pipe (and many other helpers) do not need internal go-block, making them viable to use in non-vthreads supporting runtime.
• Allow Duration instances to be passed for schedule and many other timeout related arities.
• Add genera purpose promesa.core/await! helper for uniformly wait blocking current thread an asynchronous work termination (such that Thread, CountDownLatch, or CompletableFuture, where each one implements its own mechanism and await! unifies it under single API call, do not be confused with async/await functionality)
• Add mcat, merr, hmap, hcat and fnly promise composition functions that intends to be used with ->> instead of -> and focused on performance/efficiency because they a re not performing defensive unwrapping (in difference to then, handle and catch)
• Add some convenience helpers for working with threads and vthreads (such that: interrupt, check interruption flag, sleeping, ...)
• General code cleaning and internal efficiency improvements.#2022-12-0603:40dchelimskyCognitect Labs' https://groups.google.com/g/clojure/c/3fXGjfLNOik/m/VV901_9FAQAJ#2022-12-0606:20Matthew Davidson (kingmob)Announcing a new release of Manifold, your handy-dandy async and streaming library: https://clojars.org/manifold. As well as a few bugs and minor improvements, the big changes are:
• Added windowing fns dropping-stream and sliding-stream. We've had cut-and-paste versions floating around for a while, but people keep looking for them, so they've been added. Many thanks to @rschmukler for the contribution!
• Java 8 is now the minimum supported version.
https://github.com/clj-commons/manifold#2022-12-0622:11bozhidarCIDER’s stacktrace analyzer has been extracted from cider-nrepl into a standalone Clojure library called Haystack https://github.com/clojure-emacs/haystack/ Big thanks for @r0man, who tackled this task! I hope that some of you will find Haystack useful!#2022-12-0718:45hlshipI'm glad you can support io.aviso/pretty stack traces. I would note that the README was a bit odd; the library is Pretty, the organization is Aviso (the company I was working at when I developed io.aviso/pretty initially).#2022-12-0718:45hlshipSo calling the format and library Aviso was just a bit jarring.#2022-12-0622:13bozhidar(did I mention that the new library can parse pretty much every Clojure stacktrace format in existence today? 😉 Good stuff!)#2022-12-0815:42borkdudehttps://github.com/clj-kondo/clj-kondo: static analyzer and linter for Clojure code that sparks joy ✨
2022.12.08
• https://github.com/clj-kondo/clj-kondo/issues/609: typecheck var usage, e.g. (def x :foo) (inc x) will now give a warning
• https://github.com/clj-kondo/clj-kondo/issues/1867: add name metadata to class usage
• https://github.com/clj-kondo/clj-kondo/issues/1875: add :duplicate-field-name linter for deftype and defrecord definitions.
• https://github.com/clj-kondo/clj-kondo/issues/1883: constructor usage should have name-col in analysis
• https://github.com/clj-kondo/clj-kondo/issues/1874: fix name of fully qualified class usage
• https://github.com/clj-kondo/clj-kondo/issues/1876: suppress . analysis from .. macroexpansion
• https://github.com/clj-kondo/clj-kondo/issues/1876: suppress new analysis from (String. x) expansion
• https://github.com/clj-kondo/clj-kondo/issues/1876: use namespace-munge for resolving hook files rather than munge
• https://github.com/clj-kondo/clj-kondo/issues/1896: don't consider **, *** etc. to be a dynamic vars
• https://github.com/clj-kondo/clj-kondo/issues/1899: treat var or local reference as unused value when not in tail position
• https://github.com/clj-kondo/clj-kondo/issues/1903: int can be cast to double
• https://github.com/clj-kondo/clj-kondo/issues/1871: clj-kondo marks args in definterface as unused
• https://github.com/clj-kondo/clj-kondo/issues/1879: analyze definterface more similarly to defprotocol for lsp-navigation
• https://github.com/clj-kondo/clj-kondo/issues/1907: add hooks-api/generated-node? function to check if a node was generated
• https://github.com/clj-kondo/clj-kondo/issues/1887, use re-find for ns groups rather than re-matches#2022-12-0822:31tengstrand#polylith, poly https://github.com/polyfy/polylith/releases/tag/v0.2.16-alpha, released. Here are a couple of the biggest news:
• External Test runner
• Show warning 206, if a namespace can't be parsed
• Ignore empty or commented out source files#2022-12-0908:51danielcomptonClojurists Together is looking to fund more open source Clojure projects. Please apply! https://www.clojuriststogether.org/news/q1-2023-funding-round-and-survey-results/#2022-12-0909:02pezWhen is the funding period planned to start, more specifically? Trying to figure out when is the latest start given the two month delay option.#2022-12-0909:17danielcomptonI’ve just updated it to add that:
> Funding would start from 1st of February but the start of funding can be delayed by up to two months.#2022-12-0909:20pezAwesome. Thanks!#2022-12-0917:59zeitsteinI thought the application deadline would be mid January https://www.clojuriststogether.org/open-source/. 😕#2022-12-0918:06seancorfield@U051KLSJF FYI, the opening paragraph of that post says "starting our next funding round for Q3 2022" -- should be "Q1 2023" right?#2022-12-0922:12danielcompton@U02E9K53C9L I need to update that page. The feedback we got was that people didn’t have enough time to clear their schedules when we announced it so close to the starting time. So we’re now opening for applications earlier to give people more time to announce#2022-12-0913:25tengstrand#C013B7MQHJQ, https://github.com/polyfy/polylith/releases/tag/v0.2.17-alpha, released. Fixes a bug introduced in 0.2.16-alpha.#2022-12-0918:05seancorfieldhttps://github.com/seancorfield/polylith-external-test-runner -- an external test runner that can be used with Polylith v0.2.17-alpha (or later) -- has its first official release v0.1.0!#2022-12-0913:42mkvlr👁️ Clerk – Moldable Live Programming for Clojure ✨
Notable improvements in this release:
• ⚛️ Introduce ^:nextjournal.clerk/sync metadata annotation to automatically sync state between JVM Clojure and Clerk’s browser env. https://github.com/nextjournal/clerk/pull/253 and https://github.com/nextjournal/clerk/pull/268.
• 🪗 Auto-expansion of results (opt-in via {:nextjournal.clerk/auto-expand-results? true} metadata for now) to show the shape of the data.
• 🏞️ Allow setting Open Graph Metadata for notebooks.
• 💅 Support for viewer CSS class customizations https://github.com/nextjournal/clerk/pull/294
• 🌟 and many improvements & simplifications to Clerk’s SCI Environment running in the browser.
And much more, get all details in the 🪵 https://github.com/nextjournal/clerk/blob/2035a1187efbc882016fc461fb124c96d2e8f672/CHANGELOG.md#012699-2022-12-02, find the release on 📦 https://clojars.org/io.github.nextjournal/clerk, read the 📖 https://book.clerk.vision, publish with 🌱 https://clerk.garden follow-up in #clerk. Try it with 🎄https://github.com/nextjournal/advent-of-clerk.#2022-12-0918:05seancorfieldhttps://github.com/seancorfield/polylith-external-test-runner -- an external test runner that can be used with Polylith v0.2.17-alpha (or later) -- has its first official release v0.1.0!#2022-12-0918:27ericdalloclojure-lsp Released https://clojure-lsp.io/ https://github.com/clojure-lsp/clojure-lsp/releases/tag/2022.12.09-15.51.10 with fixes, Improvements and new features! 🚀
Main highlights:
• There is a new refactoring/code action cycle-keyword-auto-resolve, check the gif!
• Finally, clojure-lsp now suggests Add import code actions, pretty useful when you know the class name but not the full package and clojure-lsp will add a :import for you ✨
• Avoid analyzing files inside ignored source-paths folders (`target` for example), which would cause find-definition/references to go to that folder wrongly, causing lots of confusion.
• Improved overall https://clojure-lsp.io/, I have in mind improve it even better adding project cases and how configure lsp/your editor for the best UX!
Thank you for all contributors and sponsors! gratitude
For more info come to #CPABC1H61#2022-12-1117:05borkdudehttps://github.com/babashka/cli: turn Clojure functions into CLIs!
v0.6.41 (2022-12-11)
• https://github.com/babashka/cli/issues/52: require value specified as non-boolean to be supplied
• https://github.com/babashka/cli/issues/53: support parsing negative numbers
#2022-12-1119:20borkdudehttps://github.com/borkdude/quickblog: light-weight static blog engine for Clojure and babashka
Instances of quickblog can be seen here:
• https://blog.michielborkent.nl/
• https://jmglov.net/blog
• https://jdt.me/strange-reflections.html
0.1.0 (2022-12-11)
• Add command line interface
• Watch assets dir for changes in watch mode
• Added refresh-templates task to update to latest templates
• Social sharing (preview for Facebook, Twitter, LinkedIn, etc.)
• Move metadata to post files and improve caching
• Favicon support
Thanks to Josh Glover (@jmglov) for heavily contributing in this release!#2022-12-1120:55Karol WójcikSeems this is something I was looking for ❤️ #2022-12-1204:14Alex Miller (Clojure team)New set of releases to move tools.deps.alpha to tools.deps
• https://github.com/clojure/tools.deps 0.16.1264 - this is a new lib (forked from tools.deps.alpha) with namespaces changed. To switch, you'll need to update your deps and remove the alpha in your requires.
• https://github.com/clojure/tools.deps.cli 0.9.10 - this is a new lib split out from old t.d.a that contains the programs in the :deps alias (which you only use via that alias so no change from a user perspective). Splitting this out will let it vary independently from tools.deps.
• tools.tools 0.3.0
• Clojure CLI prerelease 1.11.1.1208 - mostly just switching to tools.deps chanages, but also sets -XX:-OmitStackTraceInFastThrow by default #2022-12-1212:23Rachel WestmacottI was just complaining to a colleague that -XX:-OmitStackTraceInFastThrow should really be on by default when he mentioned this change!#2022-12-1213:57Alex Miller (Clojure team)dumbest default setting ever!#2022-12-1214:22pavlosmelissinosHey, thanks a lot for this, tools.deps has been all but alpha all this time, so it was about time to get rid of it. The old name didn't exactly inspire confidence to non-Clojure people and newcomers. 🙂
I noticed that the add-lib3 branch is still using the old namespaces. Any near-future plans to migrate that as well or (hopefully! 🤞) integrate it with the main branch?
No pressure of course, I'm just asking because I actually add that dev dependency to all of my projects 😄#2022-12-1214:35Alex Miller (Clojure team)hadn't thought about updating that yet, although I am spending a lot of time right now figuring out how to integrate it for reals, which will partially be in Clojure itself. I guess if enough people need it, I could do that update in add-libs3#2022-12-1214:41pavlosmelissinosIt's not a priority for me, I'm only using the branch to add/remove deps from the REPL during development, so I can just keep using it like I do now.
For what it's worth I'd rather wait a bit more and get the functionality out of the box to be honest than have the add-lib3 branch updated sooner. 🙂
edit: it's great to hear that it's on your radar!#2022-12-1220:20borkdudeNon-alpha yay congrats! Ported the latest commits to deps.clj#2022-12-2217:37rickmoynihanonly just seen this, this is great news! partyparrot#2022-12-1223:20quollhttps://github.com/quoll/raphael: A Clojure/ClojureScript RDF Turtle parser
0.1.0 (2022-12-12)
• Completely native. No external dependencies. No Java or JavaScript libraries.
• Pluggable. External constructors for IRIs, Blank nodes, and Literals can all be provided.#2022-12-1223:55lilactownstarred it just because of the name#2022-12-1315:21rafaeldelboniI loved the name hahaha#2022-12-1308:04Matthew Davidson (kingmob)Announcing Aleph 0.6.0! Huzzah!
Big changes are deps.edn support for non-Maven releases, better TLS config and error-handling, the ability to replace Dirigiste connection pools with custom versions, and shutdown configuration options. Plus, the usual litany of bug fixes and Netty upgrades.
https://clojars.org/aleph/versions/0.6.0
https://github.com/clj-commons/aleph/blob/master/CHANGES.md#2022-12-1317:40Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.11.1.1208 is now available as a stable release
• Switch to tools.deps
• https://clojure.atlassian.net/browse/TDEPS-234 - Always include -XX:-OmitStackTraceInFastThrow by default (but you can undo by setting -XX:+OmitStackTraceInFastThrow if you're some kind of sadist)#2022-12-1409:17bozhidarclojure-mode 5.16 is out! Details - https://github.com/clojure-emacs/clojure-mode/releases/tag/v5.16.0#2022-12-1414:25Sam RitchieAnnouncing v0.1.0 of clerk-utils. This library provides utilities that have been handy writing interactive docs notebooks like https://jsxgraph.mentat.org with #clerk, and documenting library code that won’t ship with a Clerk dependency.
See the interactive docs notebook for more detail: https://clerk-utils.mentat.org
• Clojars: https://clojars.org/org.mentat/clerk-utils
• Github: https://github.com/mentat-collective/clerk-utils
• cljdoc: https://cljdoc.org/d/org.mentat/clerk-utils/0.1.0#2022-12-1417:33Carsten BehringInteresting idea.
I saw yesterday this:
https://github.com/nextjournal/clerkless
Can it be that both have the same goal ?#2022-12-1417:39Sam Ritchie@U7CAHM72M for 2 of the macros I have in there, yes, and clerkless will probably be a better solution! I’m going to try out both on #C01ECA9AA74 and see if I can settle on the official release#2022-12-1417:40Sam Ritchie(the other macro, cljs, is quite light and unrelated to the clerk-shim-with-no-dependencies idea)#2022-12-1617:57Ivar RefsdalI'm pleased to announce the initial release of https://github.com/sikt-no/datomic-testcontainers. It allows you to run an on-prem transactor as a container in your tests/REPL.#2022-12-1618:00Ivar RefsdalI'm pleased to announce a new release of https://github.com/ivarref/gen-fn: Generate Datomic function literals from regular Clojure namespaces. On-prem.
This release adds auto conversion/coercion of function arguments into "proper" Clojure types, such that there is minimal mismatch between in-mem and remote transactor functions.#2022-12-1618:09Ivar Refsdal... And last but not least I'm pleased to announce a new release of https://github.com/ivarref/double-trouble: Handle duplicate Datomic transactions with ease (on-prem) and various Datomic transactor functions.
This is a bugfix release that fixes an issue only affecting - you may have guessed it? - remote transactors. ¯\(ツ)/¯#2022-12-1721:27Dumchhttps://github.com/d00mch/DartClojure translator https://github.com/d00mch/DartClojure/releases/tag/0.2.14 is out!
Fix bugs, start using widget instead of nest.#2022-12-1800:25seancorfieldHoneySQL -- Turn Clojure data structures into SQL -- com.github.seancorfield/honeysql {:mvn/version "2.4.962"} -- -- the "big ticket" item is #405: the long-requested ability to generate SQL with numbered placeholders ($1`, $2, etc) instead of positional placeholders (`?`) which means you can now use HoneySQL with the Node.js PostgreSQL driver! The release also contains a number of bug fixes:
• Fix set-options! (only :checking worked in 2.4.947).
• Fix :cast formatting when quoting is enabled, via PR https://github.com/seancorfield/honeysql/pull/443 https://github.com/duddlf23.
• Fix https://github.com/seancorfield/honeysql/issues/441 by adding :replace-into to in-flight clause order (as well as registering it for the :mysql dialect).
• Fix https://github.com/seancorfield/honeysql/issues/434 by special-casing :'ARRAY.
• Fix https://github.com/seancorfield/honeysql/issues/433 by supporting additional WITH syntax, via PR https://github.com/seancorfield/honeysql/issues/432, https://github.com/MawiraIke. [Technically, this was in 2.4.947, but I kept the issue open while I wordsmithed the documentation]
• Address https://github.com/seancorfield/honeysql/issues/405 by adding :numbered option, which can also be set globally using set-options!.
Follow-up in #C66EM8D5H#2022-12-1810:46borkdudeWorks with #C029PTWD3HR :
$ nbb -e "(require 'honey.sql) (honey.sql/format {:select :* :from :table :where [[:= :x 2]]} {:numbered true})"
["SELECT * FROM table WHERE (x = $1)" 2]
I'm sure a couple of people will be happy with this in nbb :)#2022-12-1918:44eccentric J@U04V15CAJ Exactly! All the node pg adapters used that format so this opens sooo many doors 🚪 #2022-12-2003:22skylizeInitial release of fgen v0.1.0 as a git dependency:
Generators for test.check to create functions as testing input for higher order functions.
https://github.com/skylize/fgen#2022-12-2009:34Ben SlessInitial release of keys v0.0.7 :
Select and rename keys as fast as possible in idiomatic Clojure:
(keys/select m ks) 2-3x faster than select-keys, with even faster options in store
https://github.com/bsless/keys
https://clojars.org/io.github.bsless/keys https://cljdoc.org/d/io.github.bsless/keys/0.0.7/doc/readme#2022-12-2010:54tatutany caveats or are they drop-in replacements for every corner case?#2022-12-2011:42Ben Sless@U11SJ6Q0K I think they are a drop in replacement but I haven't checked every corner case yet. I did try to not make any assumptions regarding usage.
The only caveat I can think of now is that the * versions generate a lot of inlined code, so you could in extreme cases get a compiler exception for method size, especially if mixed with other code generation libraries#2022-12-2011:48tatutI was thinking that could these be sometime included into core, in the fullness of time#2022-12-2013:06Ben SlessI would hope so. Especially the solution using reduce for select-keys has relatively good performance vs. a small amount of changes.#2022-12-2012:21borkdudehttps://github.com/babashka/sci: Configurable Clojure/Script interpreter suitable for scripting and Clojure DSLs
SCI is used in https://github.com/babashka/babashka, https://github.com/babashka/nbb, https://github.com/nextjournal/clerk, https://github.com/BetterThanTomorrow/joyride/ and many https://github.com/babashka/sci#projects-using-sci projects.
0.6.37 (2022-12-20)
• https://github.com/babashka/sci/issues/839: Performance improvement for method calls in CLJS, like (Math/sin) and (.substring "foo" 0 1), around 5 - 7x faster
• Performance improvement when calling anonymous fn
• Improve case performance
• https://github.com/babashka/sci/issues/855: Property access in JS doesn't throw when intermediate value is nil
• https://github.com/babashka/sci/issues/842: Error metadata missing on some interop calls (https://github.com/bobisageek)
• https://github.com/babashka/sci/issues/856: fix #queue [1 2 3] literal
• Implement lazy-seq as macro
• Implement ns as macro
• https://github.com/babashka/sci/issues/844: Don't resolve cljs.core/inc in JVM env
• Add case as a macro and case* as special form, rather than having case as special form
• Implement and and or as macros
• Implement fn, defn and defmacro as macros, while keeping fn* as special form
• Implement loop as macro, while supporting loop* as special form
• Implement let as macro, while supporting let* as special form
• Fix js type hint on await (https://github.com/mhuebert)
• Convert libsci scripts to bb tasks, include in CI multi-os (https://github.com/ikappaki)
• Bump edamame (Clojure parser)
• Fix benchmarking code
• Fix for SCI_ELIDE_VARS
#2022-12-2112:55bozhidarcider On the gloomiest of days (the Winter solstice) I'm happy to bring a ray of light and a bit joy to you with the release of CIDER 1.6 ("Buenos Aires")! Our first release in 4 months is packed with many cool improvements (see https://github.com/clojure-emacs/cider/releases/tag/v1.6.0) and is dedicated to my favorite city in South America and all my Argentinian friends! :flag-ar: ⭐ ⭐ ⭐ 🏆 cider#2022-12-2115:55practicalli-johnMinor update to https://github.com/practicalli/clojure-deps-ednuser level configuration for Clojure CLI, providing a wide range of community tools.
* :project/deps-new alias to create projects using [seancorfield/deps-new](https://github.com/seancorfield/deps-new) - project readme suggests using deps-new as a tool, although with this alias default (Edit: :exec-args ) are added so clojure -T:project/deps-new will create a playground project
* :lib/clerk alias for data science note books [nextjournal/clerk](https://github.com/nextjournal/clerk) - include this alias when starting the REPL to kickstart data science experiments#2022-12-2116:29Alex Miller (Clojure team)do you mean :exec-args ?#2022-12-2118:15practicalli-johnYes, I do... oops... I'll edit that bit for posterity. I guess I got :main-opts and :exec-args jumbled up somewhere between brain and keyboard 🙂#2022-12-2118:25lilactown🎄 Announcing https://github.com/lilactown/7-humble-guis, a WIP implementation of https://eugenkiss.github.io/7guis/tasks/ using the cross-platform desktop UI framework #humbleui and Clojure. 🎄
Currently, all but the 7th GUI is complete 😩 I started this awhile ago, then lost steam working on the cells GUI, and decided for the holidays to button it up a bit and release it publicly in its unfinished form, as it could still be useful to others.
Huge thanks to @tonsky for building & maintaining HumbleUI thanks2 it's so much fun to have a super simple desktop UI framework at the ends of my REPL#2022-12-2119:08lilactownsome pictures#2022-12-2120:32Eugenlooks great!#2022-12-2120:33Eugenlooking for a project to try it out ... 🙂#2022-12-2211:59NikiThat’s awesome! Especially grid! :)#2022-12-2215:11lilactownthe grid is very naive. just a bunch of textfields nestled together 😛#2022-12-2121:05lilactown🎅:skin-tone-2: Announcing https://github.com/lilactown/dom, an extremely Simple:tm: library for declaratively creating & updating web pages in ClojureScript. 🎅:skin-tone-2:
It wraps Google's extremely stable https://github.com/google/incremental-dom library, which uses no long-lived virtual DOM.
--
When hacking on some dev tooling recently, I found myself wishing for a dependency-light way to build small applications that was somewhere between raw DOM manipulation and a framework like React. Google's incremental-dom seemed to provide just enough functionality for me to quickly build something interactive while still being very light in terms of code.
I know that people have in the past showed interest in "non-React" libraries for building UI in CLJS. I hope it gives people some food for thought!#2022-12-2121:21slipsetFYI there is also https://github.com/cjohansen/dumdom which may or may not serve the same purpose. #2022-12-2122:12lilactownthe major difference is that there is no persistent VDOM used in town.lilac/dom, which is equivalent to saying there is no component model. you just have functions that are used to generate patches to the DOM.
dumdom brings in snabbdom which, while it says is an implementation detail, does mean that it adopts the way looking at the world through the lens of components. there is a persistent "identity" that each rendered component has on the page which it uses to determine certain behavior of the diffing process.
in general I think the component model is incredibly useful. I think that React's latest & upcoming changes are really taking the VDOM/component model to its obvious ends, integrating it end to end with each concern of building a web UI.
sometimes I just want to twiddle some stuff on a web page though, and that's what incremental-dom is really good at and what town.lilac/dom aims to serve#2022-12-2209:44practicalli-johnThis seems like a nicer approach to building landing pages with ClojureScript, such as https://practical.li/
I will take this for a spin in the new year, thank you.#2022-12-2122:36Alex Miller (Clojure team)https://github.com/clojure/core.match 1.0.1
• MATCH-129 - fix syntax error using string literal with a / in it#2022-12-2210:48IratiAnnouncing HOP (https://gethop.dev), an open source #devops tool for Clojure(Script) developers. HOP is an opinionated yet flexible RAD platform and a tool for easily deploying to the cloud (AWS for now, on premises and other public clouds in the pipeline).
We have created a #hop channel for any questions and feedback.
We have leveraged this platform at http://magnet.coop for years for our own projects so we hope it’s useful for the community!
Tutorial link: https://youtu.be/x1g9Pr6kSJU#2022-12-2214:53seriogahttps://github.com/strojure/undertow — first public release of new library#2022-12-2214:53seriogahttps://github.com/strojure/ring-undertow — first public release of new library#2022-12-2214:56seriogahttps://github.com/strojure/zmap version 1.0.2 as a replacement of previously announced zizzmap#2022-12-2218:47Alex Miller (Clojure team)https://github.com/clojure/tools.build v0.9.0 8c93e0c, available as both git dep and Maven artifact
• Add clojure.tools.build.api/with-project-root macro
• java-command, compile-clj - TBUILD-34 - Use Clojure CLI logic in finding Java executable
• Switch to tools.deps 0.16.1264#2022-12-2220:34borkdudeLooks a lot like deps.clj :)#2022-12-2220:35Alex Miller (Clojure team)hopefully!#2022-12-2220:36borkdudeI meant the CLI logic ;)#2022-12-2220:39Alex Miller (Clojure team)that's what I meant too :)#2022-12-2220:29borkdudehttps://github.com/babashka/scittle: execute Clojure(Script) directly from browser script tags via SCI!
v0.5.13 (2022-12-23)
• Fix reagent with-let macro with advanced compiled builds
• Upgrade promesa and shadow-cljs
• Fix #queue literal
• SCI: performance improvements
Channel #scittle#2022-12-2305:19Matthew Davidson (kingmob)https://clojars.org/org.clj-commons/byte-streams/versions/0.3.2 is out.
Big change is to fix a bug where mixing libs using the old single-segment ns and the new ns result in missing conversions/transfers. Recommended for Yada users, and people not pinning their particular byte-streams dep. New Aleph release to follow shortly.
• Upgrade to Manifold 0.3.0, remove unused dev deps
• Update docstring on to-string not being lazy
• Add basic clj-kondo support
• Deprecated single-segment namespace in README examples
Many thanks to @p-himik and @eugen.stan for their contributions.#2022-12-2311:58tomdhttps://github.com/weavejester/medley, a lightweight library of useful Clojure functions, released https://github.com/weavejester/medley/releases/tag/1.5.0!
The main new features are two new partitioning functions which I’ve written about in a blog @finn.volkel posted on #C8NUSGWG6#2022-12-2319:43delaguardoinspired by AOC day 7?)#2022-12-2409:58tomdNo actually, this work was pre-AOC. It always gets a bit time consuming for me after the first week or so, but glad to hear the fns could come in handy.#2022-12-2410:06delaguardoyes, definitely! and thanks for the blog post. i wrote something similar for day 7 solution but my variant is way slower and less generic then yours#2022-12-2508:19danielcomptonhttps://www.clojuriststogether.org/news/clojurists-together-2023-long-term-funding-announcement/#2022-12-2515:51lreadAwesome choices, a huge congrats to all!#2022-12-2809:17CJ LindbladWell deserved @U0ETXRFEW ❤️ 🎉 #2022-12-2514:01licht1steinI have finished an initial version of a Telegram Bot library: clj-telegram-bot. Issues and contributions are very welcome.
I'm still planning to add conversation support (multi step interactions that store their state), persistent interactions etc. But it's already quite usable, and what's important — data driven.
https://github.com/licht1stein/clj-telegram-bot#2022-12-2712:53timonkot13https://github.com/timonkot131/clojurescript-screeps-webpack, new version of the "screeps" template. Now with a source-map support!#2022-12-2713:38robert-stuttafordwhat is 'screeps'?#2022-12-2713:53domparryTIL: https://screeps.com/#2022-12-2713:53domparryThis looks super fun.#2022-12-2714:48robert-stuttafordwell ok then!#2022-12-2817:39dchelimskyCognitect Labs' https://groups.google.com/g/clojure/c/uT7MawAr9pg/m/dg6VPknlBAAJ
• fix URI parsing bug in ec2-metadata-utils (h/t @steveb8n)
◦ this makes the client work in aws lambda with snapstart
• add function to instrument test double client after initialization#2022-12-3013:24Sam RitchieAnnouncing v0.2.0 of clerk-utils , a library designed to help write interactive docs like https://clerk-utils.mentat.org with #clerk.
This release adds a show-cljs macro that makes it easy to use clerk with cljc files, as well as a docs page documenting how to use Clerk with a custom ClojureScript bundle: https://clerk-utils.mentat.org/dev/clerk_utils/show.html
See the interactive docs notebook for more detail: https://clerk-utils.mentat.org
• Release notes: https://github.com/mentat-collective/clerk-utils/releases/tag/v0.2.0
• Clojars: https://clojars.org/org.mentat/clerk-utils
• Github: https://github.com/mentat-collective/clerk-utils
• cljdoc: https://cljdoc.org/d/org.mentat/clerk-utils/0.2.0
#2022-12-3020:21phronmophobicDewey Search: A "not completely terrible" web page for finding clojure libraries that are hosted on github.
https://phronmophobic.github.io/dewey/search.html
Edit:
• Added https://phronmophobic.github.io/dewey/topics.html page
• Topics and authors are now clickable to show filtered view
source: https://github.com/phronmophobic/dewey/tree/gh-pages#2022-12-3020:37borkdudeDear babashka friends!
Just finished up writing the babashka http-client today and I think it's ready to be used. Please provide your feedback while this library is in flux so we can move it to a built-in somewhere in 2023!
https://github.com/babashka/http-client
org.babashka/http-client {:mvn/version "0.0.1"}
#2023-01-0214:03Ivar RefsdalGreat stuff as always!
However at my work we've had a problems when using java.net.net.HttpClient with respect to network timeouts.
For example request timeout does not cover receival of the body:
https://bugs.openjdk.org/browse/JDK-8258397
Not sure if this can be solved perfectly at a higher level such as babashka/http-client or not (or just mitigated).#2023-01-0214:05Ivar RefsdalI have not looked super close at it, but my personal preference as of now is to just stay away from https://java.net.http.HttpClient :-/#2023-01-0214:05borkdude@UGJE0MM0W The workaround that occurred to me also is mentioned here:
> A possibility for the caller is to make use of the CompletableFuture API (get/join will accept a timeout, or CF::orTimeout can be called). IIRC - in that case, it will still be the responsibility of the caller to cancel the request.
babashka http-client isn't going to fix JDK issues, unless the workaround is super obvious#2023-01-0214:05borkdudebabashka.curl and httpkit will still be available options in bb though#2023-01-0214:10borkdude@UGJE0MM0W
user=> (let [resp (http/get "" {:async true})] (deref resp 1000 ::too-late))
:user/too-late#2023-01-0214:10borkdudeuser=> (let [resp (http/get "" {:async true})] (deref resp 1200 ::too-late))
{:status 200,
#2023-01-0214:22Ivar RefsdalThat's an OK-ish workaround I think.
One problem we also had is that it takes a long time before a HTTP/2 connection is marked bad/dead.
Requests kept piling onto the same dead connection, so a bunch of requests (eventually) timed out, thus we had a flood of timeouts.
HTTP/2 is the default as far as I know. Using HTTP/1.1 would be better in this case.#2023-01-0214:30borkdude@UGJE0MM0W I don't think so:
user=> (:version (let [resp (http/get "" {:async true})] (deref resp 1000 (delay (do (future-cancel resp) ::too-late)))))
:http1.1#2023-01-0214:35Ivar RefsdalI think so:
Returns the preferred HTTP protocol version for this client. The default value is HttpClient.Version.HTTP_2
https://docs.oracle.com/en/java/javase/17/docs/api/java.net.http/java/net/http/HttpClient.html#version()#2023-01-0214:35borkdudeI wonder why I'm getting :http1.1 - I'll dig deeper#2023-01-0214:35borkdudeperhaps because the other side doesn't support http2?#2023-01-0214:36borkdudeanyway, you can set it using :version :http1.1#2023-01-0214:36Ivar Refsdalother site: I guess so.
I see that you are doing some http-version stuff as well#2023-01-0214:37borkdudeI updated the docs to set the version#2023-01-0214:52Ivar RefsdalAnyway... My experience on an unstable network (Azure container instances) + http2 (default) is unfortunately not very good with https://java.net.http.HttpClient. I'd be hard pressed to recommend it in such a setting. I also cannot recommend Azure container instances per se.
The problem lies with the JDK of course, not babashka/http-client.
I have no idea if babashka.curl/httpkit is better. clj-http is http1.1 default + timeouts that are respected AFAIK, which is what I've stuck with.#2023-01-0214:53borkdudeIf that works for you, keep using it :)#2022-12-3023:09tony.kayAnnouncing Fulcro Internationalization, version 1.0 https://github.com/fulcrologic/fulcro-i18n
This library supplies features for easily internationalizing Fulcro applications:
• Use your native language in the code strings
• Extract those to GNU gettext POT files
• Use PoEdit or other great tools to generate translations in supported languages
• Dynamically load the translations per locale from your server
#2022-12-3121:17tony.kayFulcro 3.6.0-RC1 https://github.com/fulcrologic/fulcro/
React 18 Support, Other internal improvements.
MINOR BREAKING CHANGES (caused by changes to React). See README.adoc. These should not affect 99.9% of apps.
Improvements to Transaction Processing, but stock tx processing is UNCHANGED.
* Converted internal use of dynamic vars over to react context. (async render fix).
* Added batched processing.
* Added with-batched-reads helper.
* Improved batching docstrings.
* Synchronous processor can use batching (batching off by default)
* Reduced logging
* Fixed abort in sync tx processing
* Added defnc macro to raw.components
* Added react.context ns with helpers
* Fixed shouldComponentUpdate default with context
* Added wrappers for new react hooks
* Improved hooks docstrings
* should-component-update default: No longer compares props at root (performance enhancement)
* Simplified denormalize time so most usages don’t need to bind it
* Added React.memo wrapper in components ns.
This touched a lot of internal code, so it is a release candidate. It has been tested against quite a few apps at this point. Please report issues on #fulcro#2022-12-3121:24tony.kayFulcro RAD 1.4.0 https://github.com/fulcrologic/fulcro-rad
IMPROVEMENTS:
* Updated guide
* Added remote error detection for server form errors
* Added picker options for supporting forms on pickers
* Support for create-or-edit entity picker dropdowns.
* Support in entity picker for quick-add.
* use-form: allows use of a RAD form as a React hook, for easy rendering into arbitrary contexts.
* use-report: allows use of a RAD Report as a React hook, for easy rendering into arbitrary contexts.
BUGFIXES:
* Fixed a bug in form debugger when using tempids
* Improved form on-saved to auto-include the id-key and id of the entity that was saved (tempids otherwise are a pain)
* Added a picker option to indicate the desire for a picker to also allow modal creation
* Refactored and fixed on-saved UISM form code#2022-12-3121:32tony.kayFulcro RAD Semantic UI Plugin 1.3.0 https://github.com/fulcrologic/fulcro-rad-semantic-ui/
Support for rendering new RAD features:
* Dropdowns for entity picking can now pop a modal to create or edit a new item.
* Quick-add is supported (convert a string to a complete new entity)
* NEW: Form modal. Pop a form in a modal with one line of code.
* Added fo/show-header? to enable ability to hide form header/controls for cases of embedded forms#2022-12-3121:35tony.kayFulcro RAD Datomic Plugin 1.4.0 https://github.com/fulcrologic/fulcro-rad-datomic
BUGFIX: Change needed for server-side form exceptions to show up as errors in RAD UI.#2023-01-0117:30practicalli-john[new] https://github.com/practicalli/doom-emacs-config - started a Doom Emacs configuration trying to follow the Spacemacs mnemonic menu key bindings, allowing an easier way to evaluate Doom Emacs for more experienced Spacemacs users
The config should be fairly well documented and also adding explanations and user guide in https://practical.li/doom-emacs/ (very much work in progress)#2023-01-0120:11jmglovNice! I did the same thing, but in a really makeshift way. 😅 I’ll happily steal from your more methodical approach. 😉 #2023-01-0120:27eggsyntaxHaha you have my personal thanks for sure, I'm guessing my Doom-cluelessness was the proximate inspiration for it 😂🙏#2023-01-0316:34practicalli-john@U077BEWNQ I have been evaluating Doom Emacs for the last couple of year, but your recent questions prompted me to try again.
Once I realised that workspaces in Doom were Spacemacs layouts then I felt more comfortable tweaking Doom config to my workflow.
I have found Vertico easy enough to adopt over helm and so far havent found anything missing.
I've changed a lot of key maps and updated a lot of keys in the clojure module (copying those I contributed to spacemacs where relevant)
I've also got keycast showing keys and commands in the modeline, so I can more readily do Practicalli screencasts with Doom.
Although I have changed quite a lot, the configuration is relatively simple to work with#2023-01-0316:43eggsyntaxI'm definitely hoping to give it a try at some point! Absolute basic question: the files in your repo fully replace whatever content appears by default in the DOOMDIR? Or are added to it? Or something else? Basing my guess here on https://github.com/doomemacs/doomemacs/blob/master/docs/getting_started.org#configure of the doom docs.#2023-01-0317:09practicalli-johnYes, the Practicalli Doom Emacs config can be used as a direct replacement for the .config/doom or .doom.d directory that the Doom Emacs install creates. This is separate from the clone of Doom Emacs made to .config/emacs or .emacs.d
I should add some information to that effect. Not sure what happens if doom install is run with the Practicalli doom emacs config is already cloned...
I'm making the Practicalli configuration 'modular' by separating out additional config into their own files. This keeps most of the changes in additional files, so its easier to tell what has been changed (hopefully)#2023-01-0321:20borkdudehttps://github.com/babashka/babashka: Native, fast starting Clojure interpreter for scripting babashka
1.0.169 (2023-01-03)
• Implement ns, lazy-seq as macro
• Support --dev-build flag in installation script
• https://github.com/babashka/babashka/issues/1451: Allow passing explicit file and line number to clojure.test (https://github.com/matthewdowney)
• https://github.com/babashka/babashka/issues/1280: babashka REPL doesn't quit right after Ctrl-d (https://github.com/formerly-a-trickster and Alice Margatroid)
• https://github.com/babashka/babashka/issues/1446: add pprint/code-dispatch
• Update zlib to version 1.2.13 (https://github.com/thiagokokada)
• https://github.com/babashka/babashka/issues/1454: Add babashka.process to print-deps output
• Update deps.clj / clojure tools to 1.11.1.1208
• Add reader-conditional function
• Fix pretty printing (with clojure.pprint) of vars
• Upgrade built-in spec.alpha
• SCI performance improvements: faster JVM interop
#2023-01-0422:35Matthew DowneyAnnouncing https://github.com/matthewdowney/rich-comment-tests (clojure, babashka) for turning normal Clojure comment forms into tests, for both running at the REPL during development and combining with clojure.test workflows / CI.
Essentially a less featureful version of the excellent https://github.com/hyperfiddle/rcf/ library which uses rewrite-clj instead of macros to enable syntax much closer to "normal" rich comments.
I am using it in several personal projects and I believe it is stable as of this version (v0.0.4), but I'm hoping to collect feedback and fix any bugs which might be lurking before releasing a v1.#2023-01-0509:09jeroenvandijkNice! I like the idea of annotating comment blocks and not introducing any runtime dependencies! Personally I believe the ;=> annotation is a bit fragile similar to the midje notation. And i believe emacs paredit does not always know how to deal with a line comment as the last form in a block. Because of this I'm experimenting with a custom macro (=> a b) myself#2023-01-2118:35Matthew DowneyAnnouncing v1.0.0 of https://github.com/matthewdowney/rich-comment-tests (clojure, babashka). One bugfix and no breaking changes since my last post here, and I'm happy with the API so it is now stable.#2023-01-2119:33seancorfieldLooking forward to trying this out at work (now that I'm back from vacation, I've created a JIRA ticket to track our experiment with it). I was originally excited about RCF (from HyperFiddle) but there were several problematic aspects to it -- per various issues in their repo that I discussed with them -- and your approach seems to be both simpler and also side-step those issues.#2023-01-2214:17Matthew DowneyOh very cool @U04V70XH6, let me know if you end up with any feedback or if there's any missing functionality you were hoping would be there.#2023-01-2400:59seancorfieldTried it out today. Very nice! I'll have to give the clojure.test integration some thought -- we have a Polylith monorepo so we have 150+ src folders so the test-runner with :dirs probably isn't going to work for us, but we do generate a test stub for every src file so having explicit tests that use run-ns-tests! for source files known to contain :rct/test forms might be more practical, or I could add an explicit "brick"-level test with the test-runner and the specific brick's src folder as we start to add more :rct/test forms.#2023-01-2401:05Matthew DowneyMakes sense! Let me know if there are parts of the test runner I can expose that would make this easier. Right now it's pretty https://github.com/matthewdowney/rich-comment-tests/blob/main/src/com/mjdowney/rich_comment_tests/test_runner.clj, mostly just using clojure.tools.namespace to find source files, but there's some setup of clojure.test state for test counters and output.#2023-01-2419:10seancorfieldI think we're going to settle on having an explicit component-level test for each of the components/<name>/src trees as we add RCTs to each component. If that proves to be too slow/annoying, we may switch to having a specific deftest in each *-test ns just for the matching source ns (since we have test stubs for every since source ns). I updated my VS Code/Calva config to add a custom REPL snippet to run RCTs in the current ns.#2023-01-2118:35Matthew DowneyAnnouncing v1.0.0 of https://github.com/matthewdowney/rich-comment-tests (clojure, babashka). One bugfix and no breaking changes since my last post here, and I'm happy with the API so it is now stable.#2023-01-0502:27AbhinavRelease 0.1.13 of snitch is out.
Snitch is a library with a bunch of macros that inject inline defs in your clojure code, enabling a repl-driven, editor agnostic, debugging workflow.
Biggest improvements are
1. If-let, when-let and other binding forms are supported
2. All the macros get interned in clojure.core & cljs.core so you don’t have to import them in every ns.
And some bug fixes as well.
Hat tip to @timothypratley for helping me with clojurescript related issues I had.
P.S if you find issues with clojurescript please report them, (I don’t use cljs regularly so I may have missed some things)
https://github.com/AbhinavOmprakash/snitch#2023-01-0623:33pezJoyride lets VS Code users hack their editor like Emacs users hack theirs. https://github.com/BetterThanTomorrow/joyride/releases/tag/v0.0.30 adds More JavaScript support. Previous releases have added support for requiring npm modules, and local JavaScript files. Now we add the ability to use JavaScript directly for your Joyride Scripts, so you can start hacking your VS Code environment without first learning any Clojure at all. Maybe that doesn't sound all too hot for Clojurians (why code without using Interactive Programming?), but we're hoping we can get some people interested in Clojure. We'll see, I guess. Please join #joyride to follow this project.#2023-01-0716:07pez#CBE668G4R is kicking off 2023 with some quality improvements https://github.com/BetterThanTomorrow/calva/releases/tag/v2.0.323
• Fix: https://github.com/BetterThanTomorrow/calva/issues/2006
• Partly fix (indenter): https://github.com/BetterThanTomorrow/calva/issues/1957
Thanks @m401 and @ahtunget for your contributions! gratitude ❤️ 🙏 Here's hoping you continue with more of them. 😃#2023-01-0917:29greglookA new release of https://github.com/amperity/dialog is available, a minimalist Clojure SLF4J logging library. Version https://github.com/amperity/dialog/blob/main/CHANGELOG.md#11104---2023-01-06 adds support for custom output and formatting functions via runtime symbol resolution, as well as logger level overrides on individual outputs, both requested features to make the library more extensible. It also includes some performance enhancements and a config-reloading bugfix. Thanks @eugen.stan for the feedback and contributions!#2023-01-0918:31daveinspacetimeWe at PrimeTeach AG are very happy to announce the initial releases (v0.1.0) of https://github.com/primeteach/specomatic and https://github.com/primeteach/specomatic-db.
https://github.com/primeteach/specomatic is a Clojure(script) library to define entities and their relationships via clojure.spec, and to ask questions about them.
https://github.com/primeteach/specomatic-db lets you define your entities and relationships using clojure.spec and / or specomatic and gives you an immutable SQL database that understands https://github.com/exoscale/seql and supports access control.#2023-01-2313:47mdiinThis looks very interesting. What is your experience using this regarding how database schemas evolve over time? Can you elaborate on how schema changes are turned into migrations?#2023-01-2619:30daveinspacetimeThe migration system compares the DB schema with the clojure.spec / specomatic schema and creates migrations for any missing tables or fields. This includes the history infrastructure. Changing existing fields or removing anything is not covered, that still requires manual migrations. We use the migration functions to generate SQL scripts for migratus while developing.#2023-01-0919:51ThierryCreated a fork and new version of overtone/at-at with an enhancement of being able to add a custom uid to a scheduled-job. This enables the possibility for your function to check if something has already been scheduled or not. Added some unit-tests while I was at it.
All credits go to the original creator(s) and the pull-request creator(s) I cherry-picked commits from.
https://clojars.org/org.clojars.loud/at-at/versions/1.4.0 (https://github.com/LouDnl/at-at)#2023-01-1009:08thomashave you picked up the PR's that solve the reflection problems?#2023-01-1009:10ThierryGood question, there were two PR's covering the same thing iirc. I cherrypicked all commits from PR's and recent forks I could find. So yes, I did.
https://github.com/LouDnl/at-at/commit/64d08a6adefa148b7f87cd0d1d9a6ba29e0f615b#2023-01-1009:10thomas👍 Cool thank you!#2023-01-1100:09Sam RitchieAnnouncing v0.1.0 of leva.cljs ! This library provides a #reagent interface to the https://github.com/pmndrs/leva declarative GUI library. These panels can sync bidirectionally to a stateful atom or cursor.
Please give the library a try via the https://leva.mentat.org written with #clerk.
• Clojars: https://clojars.org/org.mentat/leva.cljs
• Github: https://github.com/mentat-collective/leva.cljs
• cljdoc: https://cljdoc.org/d/org.mentat/leva.cljs/0.1.0
• Interactive docs: https://leva.mentat.org
And a quick GIF of a panel updating some reactive state:#2023-01-1104:06robert-stuttafordas a Blender learner, i approve of this UI 😄#2023-01-1104:06robert-stuttafordvery cool, Sam!#2023-01-1109:17elkenI've been really close to adding something like this myself! This looks great, lots of nice ideas for this 😄#2023-01-1112:47peterhExactly what I need for my experimental/explorative projects, thanks for doing this! clojure-spin#2023-01-1116:13IratiThe #C04F3SGPMAR wizard is here!
Now you can build your next Clojure project with our new web-based HOP CLI Settings Editor. We have written a blog post explaining how we built the wizard using Babashka and Scittle.
https://www.gethop.dev/post/the-wizard-of-hop-how-we-built-the-web-based-hop-cli-settings-editor-using-babashka-and-scittle#2023-01-1116:15robert-stuttafordsmall bit of feedback: the blue links on the dark blue background are really tough on the eyes 🙂#2023-01-1116:23IratiYou are right. We've changed the background, I hope it's more readable now.#2023-01-1116:33robert-stuttafordso much better!#2023-01-1117:35borkdude@U03CX2B143G nice! :)
If you distribute your CLI as a .jar file then you can also install it with #babashka-bbin as a global tool - might be useful#2023-01-1117:45borkdudeThis means users could then run $ hop bootstrap instead of $ bb hop-cli.jar boostrap for example#2023-01-1117:46borkdudeThis works:
bbin install --as hop
#2023-01-1117:46borkdude$ hop bootstrap
Usage: bootstrap <subcommand> <options>
Subcommands
...
#2023-01-1117:46Iratiawesome, we will explore this for sure#2023-01-1314:46Asier@U04V15CAJ done: https://docs.gethop.dev/en/latest/get-started/installation/main.html Thank you!#2023-01-1314:49borkdude@U014V99QYA1 Awesome :)#2023-01-1214:53borkdudehttps://github.com/clj-kondo/clj-kondo: static analyzer and linter for Clojure code that sparks joy ✨ clj-kondo
2023.01.12
• https://github.com/clj-kondo/clj-kondo/issues/1742: new linter :aliased-namespace-var-usage: warn on var usage from namespaces that were used with :as-alias. See https://twitter.com/borkdude/status/1613524896625340417/photo/1.
• https://github.com/clj-kondo/clj-kondo/issues/1914: Don't warn about single arg use when there's a second arg in a reader conditional (https://github.com/mk)
• https://github.com/clj-kondo/clj-kondo/issues/1912: Allow forward references in comment forms (https://github.com/mk) See https://twitter.com/borkdude/status/1603028023565062145.
• https://github.com/clj-kondo/clj-kondo/issues/1926: Add keyword analysis for edn files.
• https://github.com/clj-kondo/clj-kondo/issues/1922: don't crash on invalid type specification
• https://github.com/clj-kondo/clj-kondo/issues/1902: provide :symbols analysis for navigation to symbols in quoted forms or EDN files. See https://twitter.com/borkdude/status/1612773780589355008.
• https://github.com/clj-kondo/clj-kondo/issues/1939: no longer warn on unused namespace that was only used with :as-alias
• https://github.com/clj-kondo/clj-kondo/issues/1911: missing test assertion linter doesn't work in CLJS
• https://github.com/clj-kondo/clj-kondo/issues/1891: support CLJ_KONDO_EXTRA_CONFIG_DIR environment variable to enable extra linters after project config#2023-01-1217:21ikitommi[metosin/malli "0.10.0"] is out! Malli is a high-performance data-driven data specification library for Clojure/Script. Most notable changes:
• New optional time schemas for the JVM on top of java.time: :time/duration, :time/instant, :time/local-date, :time/local-date-time, :time/local-time, :time/offset-date-time, :time/offset-time, :time/zone-id, :time/zone-offset, :time/zoned-date-time
◦ contributions for making these work with CLJS too most welcome. Discussion https://github.com/metosin/malli/issues/49.
• Automatic type inferring with :enum and :=, detects homogenous :string, :keyword, :symbol, :int and :double schemas
• New malli.core/coercer and malli.core/coerce to both decode and validate a value, with exception throwing & cps variants
• BREAKING: re-implementation of :map-of inferring, disabled by default, configurable via options, with solid defaults
• BREAKING: Prefer to real Schemas instead of predicates in inferring (e.g. :int over 'int?)
• New malli.experimental.describe ns to describe Schemas in english:
(is (= "ConsCell <nullable vector with exactly 2 items of type: integer, \"ConsCell\">"
(med/describe [:schema {:registry {"ConsCell" [:maybe [:tuple :int [:ref "ConsCell"]]]}} "ConsCell"]))))
All changes: https://github.com/metosin/malli/blob/master/CHANGELOG.md#0100-2023-01-12
Code: https://github.com/metosin/malli
Big thanks to all contributors, and to the whole #CLDK6MFMK community!#2023-01-1217:35robert-stuttafordbrilliant!#2023-01-1217:47escherizeIncredible work 🙂#2023-01-1222:27lepistaneThanks! nice#2023-01-1308:19oliyMalli is a pleasure to use, thank you#2023-01-1308:46moeNot much of announcement, but I think I mostly finished up this implementation of Algorithm W for Hindley-Milner type inference https://github.com/moea/types/blob/main/src/types/w.clj. I think it's much easier to follow (and much shorter) than the other implementations I've seen. I'll turn it into a blog post once I've added some pretty printing and tested it a bit more.#2023-01-1315:15Noah BogartThis is so cool.#2023-01-1315:16Noah Bogart@U055XFK8V seems like something you'd be interested in#2023-01-1406:48eccentric JHaving a bit of trouble following what this project does. Could you please explain it?#2023-01-1407:15moeSure. It takes symbolic expressions representing primitive constructs in the lambda calculus + polymorphic let (or "Hindley-Milner" for short) and infers the types of them using the algorithm outlined in this paper https://www.cs.uu.nl/research/techreps/repo/CS-2002/2002-031.pdf — Hindley-Milner is the same type system used by the ML family, a subset of the one used by Haskell, etc. — and basically the foundation of all type inference algorithms, if not most type systems#2023-01-2902:09dvingoI had an interesting thought, not sure if this is possible, but could you use this sort of thing to add some static typing to clojure via clj-kondo?#2023-01-2902:10dvingospecifically to enhance how it is used with malli https://github.com/metosin/malli#clj-kondo#2023-02-0200:01EddieCool stuff! I have been working towards something along the lines of what @U051V5LLP proposes for a while, but there are tricky parts associated with Clojure's data structures being more expressive than typed collections. https://github.com/erp12/schema-inference#2023-01-1323:33Alex Miller (Clojure team)https://github.com/clojure/tools.build v0.9.1 27ff8a4
• uber - https://clojure.atlassian.net/browse/TBUILD-35 Fix error on exploding jar with / entry
• uber - https://clojure.atlassian.net/browse/TBUILD-30 Apply exclusions and conflict handlers for local and git libs#2023-01-1608:19henrikMy build fails with Too many open files at clojure.tools.build.util.file$collect_files when using this version.#2023-01-1614:29Alex Miller (Clojure team)Thanks, I’ll take a look#2023-01-1801:18Alex Miller (Clojure team)@U06B8J0AJ would be great if you could test with 0.9.2!#2023-01-1807:57henrikAll good! 👌#2023-01-1414:39borkdudebabashka Introducing https://github.com/babashka/instaparse.bb - a library that is usable from babashka and wraps a https://github.com/babashka/pod-babashka-instaparse (also new) which includes support for Instaparse! babashka
Github repo: https://github.com/babashka/instaparse.bb#2023-01-1607:41renewdoithttps://github.com/robertluo/waterfall
A minimalist library for Apache Kafka.#2023-01-1613:05borkdudeBabashka https://github.com/babashka/fs: file system utility library for Clojure
v0.2.14 (2023-01-16)
• https://github.com/babashka/fs/issues/81: do not process directories in strip-ext and split-ext
• Correct documentation for match/glob functions return value https://github.com/thenonameguy
• Add unixify: returns path as string with Unix-style file separators (`/`) on Windows systems.#2023-01-1722:00Alex Miller (Clojure team)https://github.com/clojure/tools.build v0.9.2 fe6b140
• uber - https://clojure.atlassian.net/browse/TBUILD-30 Fix the fix here from 0.9.1 to properly close file streams - whoopsie!
#2023-01-1810:42borkdudehttps://github.com/babashka/pod-babashka-buddy v0.3.3:
A pod around buddy core (Cryptographic Api for Clojure).
• You can now use buddy's crypto namespace, thanks to @iarenaza! See crypto https://github.com/babashka/pod-babashka-buddy#crypto
• Provide macOS aarch64 binaries (for faster startup on M1/M2 architectures)
See https://github.com/babashka/pod-babashka-buddy#example for a general example on how to use pod-babashka-buddy#2023-01-1810:51flowthingInitial release of https://github.com/eerohele/tab, a tool for tabulating Clojure collections.#2023-01-1811:08borkdudeNice :)
I'm playing around with a local babashka-compatible version:
clj -M:babashka/dev -Sdeps '{:deps {io.github.eerohele/tab {:local/root "/tmp/tab"}}}'
I think it could work, let me know if you're interested in a few minor enhancements for bb compatibility#2023-01-1811:08flowthingCertainly! Just let me know what those changes are and I’ll make them.#2023-01-1812:36robert-stuttafordthis is rad! be great to see this or something like this inside #C035GRLJEP8 too fyi @U5H74UNSF @U07SQTAEM#2023-01-1812:46borkdude@U0509NKGK You might already be able to use this in clerk, if this library is able to produce HTML from anything#2023-01-1812:51flowthingThe HTML Tab yields is very much tailored for Tab itself.#2023-01-1812:52flowthingBut implementing something similar (or better) in Clerk should be pretty trivial, I think. 🙂#2023-01-1814:35borkdudeIn a few minutes (after the bb master build finishes) you should be able to run tab with babashka as well! Install the dev-build with:
bash <(curl ) --dev-build --dir /tmp
#2023-01-1820:05flowthingAll right, after some quick action by @U04V15CAJ (thanks !) and some stack-blowing misadventures by yours truly, Tab now tentatively supports Babashka, too.#2023-01-1820:05flowthing(Tests forthcoming, hopefully.)#2023-01-1913:16borkdudebb 1.0.170 released with support for tab ;)#2023-01-1817:43jcoyleHappy to announce https://github.com/kushidesign/kushi.
Check out the interactive UI docs at https://kushi.design/.
A quickstart repo for kicking the tires can be found https://github.com/kushidesign/kushi-quickstart.
Detailed description, feature list and user guide is https://github.com/kushidesign/kushi.
Thoughts & feedback very welcome!#2023-01-1919:11bedersthis is lovely! Well done. Good choices#2023-01-1919:12jcoyleThank you @U628K7XGQ!#2023-01-2100:01Young-il ChooVery nice!#2023-01-2102:17jcoyleThank you @U01CUL007JP!#2023-01-2420:27leontalbothttps://www.youtube.com/watch?v=BAZpnI6HoC0#2023-01-2520:06jcoyleThank you @U07C4S0EM!#2023-01-1910:10mpenetMina 0.1.11 is out - it now uses helidon/nima 4.0.0-alpha3 (Oracle's loom based http server library)
https://github.com/mpenet/mina/#2023-01-1910:14dharriganThat is very interesting! I was listening to a podcast recently all about helidon/nima. Sounds very exciting!#2023-01-1910:21mpenetit's a very interesting project indeed. There are a few others kicking the tires of loom (ex vertx) but nima is a fresh take on it and they have big goals. Plus the fact it's built by oracle (with access to loom devs directly) is quite encouraging.#2023-01-1910:35mkvlrglad to see it! Do you have plans to add support for WebSockets?#2023-01-1910:42mpenetYes that will come next #2023-01-1911:19mkvlrhttp-kit’s api there is something to maybe take inspiration from, I find it nice & simple#2023-01-2006:32dominicmHttp kits API has problems with back pressure iirc?#2023-01-2008:19henrik@U09LZR36F It does? That’s good to know. Although, is it a problem with the API or the implementation of it? I think @U5H74UNSF maybe means the UI, rather.#2023-01-2008:45dominicmI think it wasn't possible to solve because of the API#2023-01-2012:41henrikAh, interesting.#2023-01-2012:42henrik@U11EL3P9U Sounds interesting, could you share the podcast/episode?#2023-01-2013:19dharrigan@U06B8J0AJ sure, here you go #2023-01-2707:18henrikThat was an interesting podcast.
I’ve seen different opinions on the impact of native green threads on Clojure here and there. Some seem to mean that core.async is enough, and that this will have no impact on us. That seems a little dubious for me. Clojure has always tried to tap into the underlying platform where possible, and ignoring the most monumental shift in the JVM for a long, long time would be shortsighted imo.
Nevertheless, I suppose we’ll end up exposed to it one way or another anyway, regardless of core.async, via libraries like this one, or via the new incarnation of Jetty etc,#2023-01-2708:35mpenetcore.async will still be relevant, loom doesn't give you (by itself) any way to do some tricky composition with fibers. There's "Structured Concurrency" but it's still in flux I think (haven't look at it in a while), think about the kind of stuff we do now with alt! and channels in general. So I think we're more likely to see some level of integration with loom in core.async (a/thread variant, re-implementation of go or go variant based on it, stuff like that).#2023-01-2709:43henrikLoom and and the JVM green threads aren’t the same thing, though. I understand Loom as basically a structured concurrency solution on top of the JVM green threads, so essentially an alternative to core.async.
I guess I may have misinterpreted the online discussions if those were talked about interchangeably.#2023-01-2710:01mpenet"structured concurrency" has a strong meaning. vthreads is one thing, and sc a continuation of the work to allow to use vthreads (& co) with the common patterns we use in the "async" world, (err handling, tasks interruptions etc). They are actually 2 different jep that make loom (so far)#2023-01-2710:36henrikYeah, this is why I feel like green/virtual threads is a “wow” moment for the JVM, while my impression of Loom so far is kind of “well, nice for Java users!”#2023-01-2710:39henrikI don’t really know that this is true, but I feel like interoperability should better when green thread solutions speak the same low-level language, essentially, rather than relying on custom solutions for each implementation.
It seems like they have something coming to stop file system operations from hogging the underlying OS thread (I wasn’t even aware that this was an issue previously). I’m guessing that this will presume JVM-native green threads though.#2023-01-1912:09HuahaiDatalevin 0.8.0 is out - this release significantly improves the data ingestion speed and reduces index size of the built-in full-text search engine, with 5X speed improvement and 10X space reduction for the default setting; among several other bug fixes and improvement. https://github.com/juji-io/datalevin#2023-01-2011:18oliyHi all, I made an emacs integration for borkdude/carve. It lets you run carve with a simple key binding and opens a result buffer where you can navigate to the results and add them to your ignore file with a single keystroke.
Any feedback or PRs welcome, as always. Enjoy!
https://github.com/oliyh/carve.el#2023-01-2011:20borkdudeCool! Feel free to make a PR against carve to document this project#2023-01-2011:27oliyhttps://github.com/borkdude/carve/pull/66 🙂#2023-01-2011:31borkdudemerged#2023-01-2012:42borkdudehttps://github.com/babashka/neil: a CLI to add common aliases and features to deps.edn-based projects
See the https://blog.michielborkent.nl/new-clojure-project-quickstart.html blog post for a gentle introduction into neil.
0.1.48 (2023-01-20)
• Print a message and exit when the github rate-limit is reached (https://github.com/babashka/neil/issues/136) (https://github.com/russmatney)
• Friendlier env vars for neil github token usage (https://github.com/babashka/neil/issues/136) (https://github.com/russmatney)
◦ BABASHKA_NEIL_DEV_GITHUB_USER -> NEIL_GITHUB_USER
◦ BABASHKA_NEIL_DEV_GITHUB_TOKEN -> NEIL_GITHUB_TOKEN The old env vars are left in-place as a fallback, but may be removed in a future version.
• neil dep add: Always write library names as namespaced symbols (https://github.com/teodorlu)
◦ Old behavior: neil dep add http-kit writes http-kit {:mvn/version "2.7.0-alpha1"} to deps.edn
◦ New behavior: neil dep add http-kit writes http-kit/http-kit {:mvn/version "2.7.0-alpha1"} to deps.edn#2023-01-2014:23stathissiderisbb-dialog: a new library to easily make your babashka scripts interactive! https://www.pixelated-noise.com/blog/2023/01/20/bb-dialog-announcement/index.html - all credit goes to @jarcane#2023-01-2017:20Benjaminthe deps.edn snippet is missing a " . Looks nice I am trying it#2023-01-2017:21stathissideris@U02CV2P4J6S thanks, will fix asap!#2023-01-2100:48practicalli-john❤️ ncurses ❤️#2023-01-2017:15Alex Miller (Clojure team)https://github.com/clojure/data.int-map 1.1.0 - A map optimized for integer keys
• DIMAP-17 - use singletons for empty int maps and sets - thanks Josh Lemer
• DIMAP-16 - fix equals and equiv don't compare equals with Java maps/sets - thanks Andy Fingerhut
• DIMAP-18 - fix empty doesn't preserve meta - thanks Josh Lemer
• DIMAP-7 - fix minor typos in README and docstring - thanks Ben Cook
• Remove unused ArrayList allocation - thanks Josh Lemer#2023-01-2115:38geraldodevInvoker of MyBatis migrations, a file based native sql migrator from old
glorious java time that really works.
https://gist.github.com/geraldodev/f4cc25376331ebd37d2eb8a4d3ccf8a9#2023-01-2121:47lispycloudsHot on the heels of bb-dialog, announcing https://github.com/lispyclouds/bblgum: A very simple and tiny wrapper around the awesome https://github.com/charmbracelet/gum making your #babashka and clojure CLI code more glamorous! ps: Is there a smaller lib than this? Seriously, look at its source! 😅 Have a spin, any and every feedback is welcome!#2023-01-2121:57Noah BogartThis is so cool! Thanks for writing it#2023-01-2122:49Cora (she/her)this is really nice! It's simple enough that I could see it working with other tools too, maybe#2023-01-2122:53lispycloudsyep! its a glorified cli cmd formatter 😅 some of the gum opinions and quirks leak out but not much. was debating whether this should be a lib or just a gist!#2023-01-2122:55nateGlad it's a lib#2023-01-2209:04pezIt could almost fit in a tweet.#2023-01-2304:26KeesHmm.. Almost as good a name as Bazooka 😉#2023-01-2311:13Anders EknertAnnouncing https://github.com/anderseknert/ring-clr, which as the name implies, is a ClojureCLR port of the ring library. Made mostly to learn what writing a larger project for ClojureCLR would entail, and to serve as an example of what such a project might look like (as I found almost no such examples myself). A blog on the topic will follow later. Feedback much appreciated, and if you want to discuss ClojureCLR in more detail, I’m in the #C060SFCPR channel along with those who actually know something about it 😅#2023-01-2314:40dimovichhttps://github.com/thi-ng/geom/ Has finally reached version 1.0.0.#2023-01-2318:30Sam RitchieAnnouncing v0.23.0 of the #sicmutils computer algebra system! This release concludes the port of all “mechanics” physics-related code from original “scmutils” Scheme library that started all of this.
NOTE that this will be the final release before extracting most of the project out and renaming it the “Emmy Computer Algebra System”.
• Clojars: https://clojars.org/sicmutils/sicmutils
• release notes: https://github.com/sicmutils/sicmutils/releases/tag/v0.23.0
• Come chat or ask questions over at #sicmutils , or #mentat-collective for Emmy + associated project development going forward!
Cheers!#2023-01-2413:49delaguardohttps://github.com/DotFox/jsonista.jcs an extension for https://github.com/metosin/jsonista to make generated json compliant with RFC 8785 and useable for cryptographic operations.#2023-01-2416:14Mark WardleAnnouncing https://github.com/wardle/hermes - SNOMED CT medical terminology server and library, in use now in many countries (!), including UK supporting user-facing clinical applications as well as used in a number of clinical research projects. Since the last announcement here, changes: Native support for Apple Silicon; Much improved command-line operation; Even faster import and processing; Minor fixes and improvements, including rejigging internal namespace structures; Added namespace visualisation to documentation.#2023-01-2416:14Mark WardleThanks to https://github.com/greglook/clj-hiera for the nice namespace visualisation (helping spot weirdness in namespace relationships).#2023-01-2416:16Mark WardleAnd I discussed how I've used hermes (and other Clojure-based work)( for a project for the European medicines regulator at reClojure 22: https://www.youtube.com/watch?v=2HQSAtmVbAU#2023-01-2422:34kennytiltonWould the link https://www.nlm.nih.gov/healthit/snomedct/index.html behind "SNOWMED-ST" help dummies like me? 🙂
Hmm, I have always beat on the http://FDA.GOV (?) adverse reactions endpoints in my async demos. I am guessing Hermes will take me to another level. mxWeb needs a demo project. Gotta go check if snomed needs a decent, programmable browser...#2023-01-2509:19Mark WardleThanks @U0PUGPSFR - you should be able to download the US edition from the NLM - there are licensing requirements that mean you'll probably need to sign up to your national release centre - I don't set those licensing requirements of course - but once you have downloaded an edition, or two, then you can use hermes to import and run a local, or cloud based server. We run on local server infrastructure in one facility, but I know of others using Google Cloud Run for example, and I have another running on AWS for another project, and for analytics, I use running locally. Let me know if you have any issues and I'll try to help!#2023-01-2515:35kennytiltonThanks! I got as far as the licensing requirements and punted. 🙂 Thx for the offer of help, tho!#2023-01-2417:18wilkerlucioFirst release of Pathom 3 this year, [com.wsscode/pathom3 "2023.01.24-alpha"] is out!
This release fixes some issues that were pending for a while:
• Fix multiple inclusions of attribute error resolver (issue #175)
• Fix stack overflow on nested attribute cycles (issue #168)
• Fix batch waiting execution order (issue #169)
Thanks for all the users that reported and helped me debug those!
https://clojars.org/com.wsscode/pathom3#2023-01-2418:15borkdudehttps://github.com/borkdude/edamame: configurable EDN and Clojure parser with location metadata and more
1.1.17
• Add parse-next+string for reading next value + the read string (analog to read+string in Clojure)
#2023-01-2418:18djblueThis was super quick! ❤️#2023-01-2418:31borkdudeAdding it to SCI now#2023-01-2418:32borkdude@U1G869VNV done#2023-01-2418:32borkdudeI assume you can use SCI as a git dep for the time being, right?#2023-01-2500:44djblueI bumped the version, but now I'm seeing #object[Error Error: Can't dynamically bind non-dynamic var #'clojure.core/*3] . Only switched to the new reader and parsing fn :thinking_face:#2023-01-2508:06borkdudeThis doesn’t ring a bell. From what SCI version did you upgrade?#2023-01-2509:03borkdudeRepro welcome and I'll look into it#2023-01-2516:31djblueI think it might be a combination of https://github.com/babashka/sci/commit/3b82c930f09a65ac6c5d472383d171ffdf3bf905#diff-faebb48a23c0728ab5401da8d8a73473dfb546b9c04cf37f0913fc731f7a725e change with these defs in https://github.com/clojure/clojurescript/blob/r1.11.60/src/main/cljs/cljs/core.cljs#L207-L221 which differer slightly from the https://github.com/clojure/clojure/blob/master/src/clj/clojure/core.clj#L6323-L6341 bindings :thinking_face:#2023-01-2516:50borkdudeso those aren't dynamic, right#2023-01-2516:50borkdudeand you are binding them in portal?#2023-01-2516:51borkdudeyou can do this:
(alter-meta sci/*1 assoc :dynamic true)
#2023-01-2516:52borkdudeor use sci/alter-var-root instead of binding to change them#2023-01-2516:54borkdudethe latter is what I'm doing in CLJS SCI REPLs#2023-01-2510:30borkdudeIntroducing clj-kondo-bb: invoke clj-kondo from babashka scripts (or as a babashka one liner)!
clj-kondo ✨ babashka
https://github.com/clj-kondo/clj-kondo-bb#2023-01-2515:09seancorfieldio.github.seancorfield/build-uber-log4j2-handler {:git/tag "v2.19.0" :git/sha "6c4a14a"} -- A conflict handler for log4j2 plugins cache files for the uber task of tools.build. -- https://github.com/seancorfield/build-uber-log4j2-handler
• The version number reflects the underlying log4j2 version being used (for the first time)
• Since I am retiring my build-clj wrapper, I am raising the profile of this conflict handler separately: if you build uberjars with tools.build and you have multiple dependencies that provide formatting plugins for log4j2, you need this conflict handler to merge them correctly! 🙂
Follow-up in #tools-build#2023-01-2521:59Sam RitchieAnnouncing v0.1.0 of mathbox.cljs ! This library provides a #reagent interface to the stunning https://github.com/unconed/mathbox WebGL mathematical visualization library. See http://mathbox.org for a directory of all of the crazy stuff you can do with MathBox.
Please give the library a try via the https://mathbox.mentat.org written with #clerk.
• Clojars: https://clojars.org/org.mentat/mathbox.cljs
• Github: https://github.com/mentat-collective/mathbox.cljs
• cljdoc: https://cljdoc.org/d/org.mentat/mathbox.cljs/0.1.0
• Interactive docs: https://mathbox.mentat.org
• Questions / discussion in #mentat-collective
Finally, check this page out for a wild example of the kind of interactivity possible with mathbox.cljs and leva.cljs: https://mathbox.mentat.org/dev/mathbox/examples/math/pq_knot.html#2023-01-2522:04Alex Miller (Clojure team)https://clojurians.slack.com/archives/C03RZMDSH/p1674684121908009
with new https://blog.datomic.com/2023/01/Query-Stats.html feature!#2023-01-2605:53pfeodrippeRecife (It’s a model checker on Top of TLC (you can basically write formal specifications and run them)) (https://github.com/pfeodrippe/recife) has a new version (`0.9.0`), there are tons of new features and perf improvements.
• https://clojars.org/pfeodrippe/recife
• Examples at https://github.com/pfeodrippe/recife/tree/master/test
I will document things in a new guide (generated with Clerk BTW), check out https://recife.pfeodrippe.com (lots of TODO).
• Perf improvements (~5x), still there is still a long way (~10x) to achieve TLC performance, but small steps)
• New helpers namespace, convenient macros for usage at your own peril (recommended) (see a recent https://github.com/pfeodrippe/recife/blob/master/test/recife/example/readers_writers.clj#L50)
◦ https://www.hillelwayne.com/post/action-properties/
◦ More powerful https://www.hillelwayne.com/post/fairness/
• Added new docs (using #clerk) that I will hopefully have more time to work with
• Added support for TLC simulate and generate commands
◦ Generate was introduced recently by the TLC folks to support statistics, and, ofc, we can use Clerk to generate them in real-time, see https://www.youtube.com/watch?v=2LsZ2f3WZF4&feature=youtu.be
▪︎ Also, check some https://github.com/pfeodrippe/recife/blob/master/test/example/knuth_yao_die.clj#L29
• Etc #2023-01-2606:09robert-stuttafordsmall recommendation: add a one paragraph 'what is this?' intro at the top of the readme 🙂#2023-01-2606:12pfeodrippeWill do, thanks, Robert!!#2023-01-2607:11borkdudeAnd at the top of this post#2023-01-2613:30pfeodrippeAdded here, thanks! #2023-01-2610:38borkdudehttps://github.com/borkdude/carve: remove unused Clojure vars clj-kondo ✨ babashka
0.3.5
• Upgrade clj-kondo version
• Make babashka compatible by using the https://github.com/clj-kondo/clj-kondo-bb library
• Discontinue the carve binary in favor of invocation with babashka. Instead you can now install carve with https://github.com/babashka/bbin: bbin install io.github.borkdude/carve
• Implement https://github.com/babashka/cli integration
• Implement --help#2023-01-2612:59ericdalloclojure-lsp https://clojure-lsp.io/: IDE and CLI development tool
Released https://github.com/clojure-lsp/clojure-lsp/releases/tag/2023.01.26-11.08.16 with lots of improvements and new features! 🚀
Main highlights:
• clojure-lsp now understand edn files, making most features work out of the box, like navigate to/from keywords and symbols ✨ (gif)
• Navigation of quoted symbols (e.g. 'clojure.core/inc) now works
• Lint now consider edn files, not only clj* ones.
• Tweaks across multiple features, renaming, completion, semantic tokens, code actions.
Thank you for all contributors and sponsors! gratitude
For more info, come to #CPABC1H61#2023-01-2613:02pezSo sweet. Thanks for providing! gratitude ❤️ 🙏 Navigate to quoted symbols, yummy!#2023-01-2613:02borkdudeHey, I implemented that! 😃#2023-01-2614:30robert-stuttafordsweet!#2023-01-2617:27hissyfitAnnouncing https://gitlab.com/hissyfit/lein-gitlab-cart, a Leiningen plugin that enables projects to access and deploy to GitLab package registries.
• Clojars: https://clojars.org/net.clojars.hissyfit/lein-gitlab-cart
• GitLab: https://gitlab.com/hissyfit/lein-gitlab-cart
#2023-01-2618:28Sam RitchieAnnouncing v0.1.0 of Mafs.cljs ! This library provides a #reagent interface to the https://mafs.dev 2d interactive mathematical visualization library, all backed by SVG.
Please give the library a try via the https://mafs.mentat.org written with #clerk.
• Clojars: https://clojars.org/org.mentat/mafs.cljs
• Github: https://github.com/mentat-collective/mafs.cljs
• cljdoc: https://cljdoc.org/d/org.mentat/mafs.cljs/0.1.0
• Interactive docs: https://mafs.mentat.org
• Questions / discussion in #mentat-collective
Finally, here’s an example of an interactive function graph built with Mafs.cljs:#2023-01-2618:29Sam RitchieI went pretty wild with the number of components on http://mafs.mentat.org, so apologies for the slow loading time 🙂 I’ll pick that notebook apart and make the load more manageable in the coming days#2023-01-2618:29eggsyntaxLots of goodies from you this week! 👏 😄#2023-01-2618:29Noah BogartA+ name haha#2023-01-2618:31Sam Ritchie@U077BEWNQ haha yes! next step is pushing some changes to my function compilation in the computer algebra system… then things will get really wild with live-updateable versions of simulations like this https://emmy-viewers.mentat.org/src/phase_portrait.html#2023-01-2618:37eggsyntaxOoooh, very cool :star-struck:#2023-02-0320:11Bobbi TowersIf this had existed, I wouldn't have had to make mine in hand-coded SVG https://github.com/BTowersCoding/trig#2023-02-0320:11Sam RitchieVery artisanal!!#2023-02-0320:12Sam RitchieThat’s awesome, clearly we’ve got the same ideas in mind… see http://mathlive.Mentat.org for another piece here #2023-02-0320:13Bobbi TowersI've been meaning to check out your stuff for the longest time#2023-02-0320:15Sam RitchieI’ll have a template out soon that will make it feasible to actually add “how to use with Clerk” guides to each project that should make it easier… but yeah anything along these lines that you’ve been wishing for or need for your own work, let me know @U8LB00QMD #2023-02-0320:18Bobbi TowersI just started learning mathematics about 4 years ago, and at the time I had to use other languages for CASs (eg. Mathematica, SymPy, etc.) and attempting to port things to Clojure... basically what you're doing but way worse 😆#2023-02-0320:19Sam RitchieAmazing how much you learn trying to port stuff though right? #2023-02-0320:19Sam RitchieWe’re the lucky ones, even if the tools turn out to be useful #2023-02-0320:20Bobbi Towersthat's what's kept me from trying emmy thus far, because I'm emotionally invested in my janky little toys#2023-02-0320:21Sam RitchieFeel free to steal pieces too and rewrite them! #2023-02-0320:21Sam RitchieThat’s the idea behind the overboard docs in many of the namespaces #2023-02-0320:24Sam RitchieThe python stuff is the janky toy set ;)#2023-02-0320:26Bobbi Towerseventually I want to use emmy to develop an extremely beginner-level maths curriculum, to serve as a gentle onramp for it#2023-02-0320:32Bobbi Towers> The python stuff is the janky toy set 😉
Yeah I ran into issues with SymPy fairly early on and got stuck. I think the simplify function was kind of broken#2023-01-2711:31pezcalva Calva https://github.com/BetterThanTomorrow/calva/releases/tag/v2.0.327 is out. 🚀 It contains a major update to the clojure-lsp integration. Calva now supports multi-clojure-projects where there is no governing project file for all the projects. Thanks @m401! 🙏 ❤️ See https://calva.io/clojure-lsp/ to see how it works now. (For most users, it should work just as before. This change should affect mostly for user who need the extra control.) Also, thanks @ahtunget for continuing your quality sweeping! 🙏 ❤️
• https://github.com/BetterThanTomorrow/calva/pull/2020
• Fix: https://github.com/BetterThanTomorrow/calva/issues/934
• Fix: https://github.com/BetterThanTomorrow/calva/issues/1706
• Fix: https://github.com/BetterThanTomorrow/calva/issues/1977#2023-01-2712:38borkdudehttps://github.com/borkdude/jet: CLI to transform between JSON, EDN, YAML and Transit using Clojure.
0.4.23 (2023.01.27)
• https://github.com/borkdude/jet/issues/123: Add base64/encode and base64/decode
• Add jet/paths and jet/when-pred
• Deprecate interactive mode
• Deprecate --query in favor of --thread-last, --thread-first or --func
#2023-01-2712:43borkdude#2023-01-2713:14sheluchinThanks, @U04V15CAJ. I've been using Jet more often lately and it's quite handy.#2023-01-3011:19borkdudehttps://github.com/borkdude/quickblog: light-weight static blog engine for Clojure and babashka
Instances of quickblog can be seen here:
• https://blog.michielborkent.nl/
• https://jmglov.net/blog
• https://jdt.me/strange-reflections.html
0.2.3 (2023-01-30)
• Improve visualization on mobile screens (https://github.com/MatKurianski)
• https://github.com/borkdude/quickblog/issues/51: Enable custom default tags or no tags (https://github.com/formsandlines)
• Enable use of metadata in templates (https://github.com/ljpengelen)
• Replace workaround that copies metadata from api/serve
• https://github.com/borkdude/quickblog/issues/61: Add templates that allow control over layout and styling of index page, pages with tags, and archive (https://github.com/ljpengelen)
• Preserve HTML comments (https://github.com/ljpengelen)
• Support showing previews of posts on index page
#2023-01-3013:01elkenQuickblog looks really nice, is there any interest in adding support for blogs via org-mode?#2023-01-3020:31borkdudeI guess this depends on the availability of a good org-mode parser that is compatible with clojure /bb (but wrapping it in a pod can also work)#2023-01-3020:32borkdudeI spotted this lib https://github.com/bnbeckwith/orgmode but I'm not sure how good it is#2023-01-3020:32borkdudeI also spotted https://github.com/theiceshelf/firn which was first written in clojure but now in Rust#2023-01-3020:57elkenYeah I found those, the former doesn't look "complete" but should be good enough for a simple blog, hmm#2023-01-3110:39borkdude@U043RSZ25HQ Well, I'm fine with some experimental PR that adds org-mode support using that lib, but no promises :)#2023-01-3110:39elkenI'll see what I can draft this week 🙂#2023-01-3110:39borkdudeWorst case you would end up with a fork that you can use personally, but some real world experience writing posts before merging it would make sense as if this lib is immature I would end up with support issues#2023-01-3110:40elkenMy site is due a rewrite anyway so I'm fine being the guinea pig haha#2023-01-3015:44zalkyHey folks, there is now an embedded dart-sass compiler and watcher for Clojure:
• Wrapper around the https://github.com/larsgrefer/dart-sass-java
• Aims to be a drop-in replacement for the deprecated https://github.com/Deraen/sass4clj
• Gives you access to classpath resources and webjars
Hope it is helpful! :rightwards_hand: 🎁
https://github.com/zalky/dart-sass-clj#2023-01-3015:59robert-stuttafordoh man this will be amazing if it works with our .scss herd. thanks for doing this @U0HJK8682!#2023-01-3016:08zalkyHappy to do it. Let me know if you run into issues!#2023-01-3106:29flowthingThank you for making this, and especially for making it a drop-in replacement for sass4clj!#2023-01-3017:57lreadrewrite-clj 1.1.46 - Rewrite Clojure code and edn
Highlights from the https://github.com/clj-commons/rewrite-clj/blob/main/CHANGELOG.adoc#v1146:
• added new rewrite-clj.zip functions of-string* and of-file*, these are versions of of-string and of-file that do no auto-navigation (thanks @jacob.maine for the analysis work!)
• a lazy sequence now coerces to a rewrite-clj list node (thanks @borkdude!)
• implement equality for seq nodes (thanks again @borkdude!)
• exceptions thrown while reading now include :row and :col keys in ex-data (thanks @ferdinand!)
• and... a nice docstring typo fix (thanks @porkostomus!)
rewrite-clj is one of the many projects under the loving care of https://github.com/clj-commons.#2023-01-3105:04tony.kayFulcro 3.6.0 https://github.com/fulcrologic/fulcro
• Support for React 18
• Added batched processing.
• Added with-batched-reads helper.
• Improved batching docstrings.
• Synchronous processor can use batching (batching off by default)
• Reduced logging
• Fixed abort in sync tx processing
• Added defnc macro to raw.components
• Added react.context ns with helpers
• Fixed shouldComponentUpdate default with context
• Added wrappers for new react hooks
• Improved hooks docstrings
• Simplified denormalize time so most usages don’t need to bind it
• Added React.memo wrapper in components ns.#2023-01-3105:16Žygimantas MedelisFirst release of the Bosquet LLM operations library with support for prompt composition and completion via OpenAI API. It is built on top of Selmer to get great templating functionality, and Pathom to resolve dependencies between prompt components.
https://github.com/zmedelis/bosquet#2023-01-3106:39kuzmin_mMy https://darkleaf.github.io/di/ is now in its second release (2.0.0). Check out https://darkleaf.github.io/di/notebooks/integrant.html with Integrant.#2023-01-3111:43borkdudehttps://github.com/borkdude/lein2deps: A leiningen project.clj to Clojure CLI deps.edn converter.
0.1.0
• lein lein2deps plugin. See https://github.com/borkdude/lein2deps#lein-plugin.
• https://github.com/borkdude/lein2deps/issues/7: maintain order of deps in project.clj and no namespacing of maps
• https://github.com/borkdude/lein2deps/issues/2: accept regex in project.clj when safe-parsing
• https://github.com/borkdude/lein2deps/issues/3: add clojure -Ttool support
• https://github.com/borkdude/lein2deps/issues/4: convert :repositories to :mvn/repos
• Add "resources" automatically to :paths
• Improve quality of generated deps.edn (https://github.com/jeroenvandijk)
You can now use the leiningen plugin to automatically synchronize your project.clj with a deps.edn.
Add:
:plugins [[io.github.borkdude/lein-lein2deps "0.1.0"]]
to your project.clj and then run:
lein lein2deps --write-file deps.edn --print false
To run the plugin on any invocation of lein, add it to :prep-tasks:
(defproject my-project "0.1.0"
:plugins [[io.github.borkdude/lein-lein2deps "0.1.0"]]
:dependencies [[org.clojure/clojure "1.11.1"]]
:prep-tasks [["lein2deps" "--write-file" "deps.edn" "--print" "false"]])
#2023-02-0110:34genmeblogCool! Does it include contents of ~/.lein/profiles.clj?#2023-02-0110:46borkdudeNo it doesn't#2023-02-0110:51genmeblogOk, it would be cool. A lot of defaults for dev profile I keep there (also some credentials and other common configs). Maybe I expect too much but it would be great to have complete lein to deps.edn migration tool.#2023-02-0110:52borkdudeThis is for managing a project, not for managing a system with global config#2023-02-0110:52borkdudeMostly for libraries that you want to manage with lein but also expose to deps.edn users (or as a first step for migrating towards deps.edn)#2023-02-0110:53borkdudeIf you have ideas on what a tool like this should do with profiles, I'm still interested#2023-02-0111:14genmeblogGenerally speaking I would be interested in kind of drop-in replacement for lein (let's say a vanilla version without plugins). So not only pure deps but also building, compiling (also with java), installation, jar, deploy, test run, etc... I know all of this is doable with current tooling but migration is not as easy as it should be.#2023-02-0112:18borkdude@U1EP3BZ3Q In that case I would take a look at this: https://blog.michielborkent.nl/new-clojure-project-quickstart.html
I can set up a new project with uberjar + deploy in seconds using #C03KCV7TM6F#2023-02-0219:50genmeblogThanks, I know that. It's still a subset of my needs and is better for a new project than existing one with lein.#2023-01-3115:13zalkyNew: Coding on the fly, from take-off to landing, with a tool.deps build library:
1. Power up your deps.edn aliases:
◦ Run multiple concurrent functions via merged deps aliases in the same runtime
◦ A simple way to load extra namespaces
◦ Merge in environment variables (opt-in via peer dependency)
2. Rock-solid live reloading of code and your running application:
◦ Fork of clojure.tools.namespace that fixes https://clojure.atlassian.net/browse/TNS-6 which greatly improves c.t.n robustness (a patch has been submitted)
◦ Choose how to reload dependent namespaces: eagerly or lazily
◦ More robust error handling, recovery and logging during component lifecycle methods
◦ Cleanly shutdown your application on interrupt signals
Hope it is helpful! :rightwards_hand: 🎁
https://github.com/zalky/runway#2023-01-3115:22Alex Miller (Clojure team)Is TNS-6 something that could just be moved forward? No one is really actively looking at TNS stuff right now. Would be happy to do so if that means not needing to fork#2023-01-3115:23zalkyI've been using it regularly for a couple of years with no issues. And it's a one-liner.#2023-01-3115:23Alex Miller (Clojure team)Fogus or I can take a look at it on Friday#2023-01-3115:31Daniel JompheThe documentation seems quite extensive, full of value-laden tips.
Thanks for sharing!#2023-01-3115:50zalkyHappy to do it, hope people find it useful!#2023-01-3116:13wilkerlucio[com.wsscode/pathom3 "2023.01.31-alpha"] is out!
This release contains some significant bug fixes, specially around batching and nested inputs! Thanks for all the community for sending and helping with the debug of those!
• Fix map container handling on runner (issue #176)
• pf.eql/data->shape now takes ::pcr/map-container? into account
• Disregard ident values on cache keys for the planner (issue #182)
• Fix stack overflow on planning nested attribute cycles on dynamic resolvers (issue #179)
• Fix name reporting on invalid config for resolvers and mutations (issue #181)
• Fix missing data on nested batches (issues #173 & #177)
• Fix planning issue when optimizing OR subpaths (issue #170)
• Index nested attributes (issue #167)
https://clojars.org/com.wsscode/pathom3#2023-01-3116:24dchelimsky{nubank/matcher-combinators {:mvn/version "3.8.0"}} is out!
Thanks to @phillipmates and @dpassen1 for some nice improvements:
- Add seq-of matcher, which takes a matcher, successfully matching when each element matches the provided matcher.
- Add any-of matcher, which takes any number of matchers, successfully matching when at least one matches.
- Add all-of matcher, which takes any number of matchers, successfully matching when all match.
- Add 2-arity pred matcher where the second argument is a description text.
- Useful for mismatch messages when the pred is an anonymous function.
- Allow globally configuring ANSI color emission via newly added enable! and disable! functions in matcher-combinators.ansi-color
- Export clj-kondo config to silence unresolved-symbol warnings on match? and thrown-match?#2023-01-3116:47IratiNew release: #hop now deploys on-premises too: https://www.gethop.dev/post/hop-on-premises
On the previous version of HOP CLI, users could only choose AWS as the deployment target. Now, when you open the settings editor using the latest version of HOP CLI, you will also have the option to choose On-premises.#2023-02-0106:12seancorfieldcom.github.seancorfield/expectations {:mvn/version "2.0.165"} -- https://github.com/clojure-expectations/clojure-test -- A clojure.test-compatible version of the classic Expectations testing library. -- this is the first update in about a year, very minor, but the more-> hook should help folks who use clj-kondo:
• Fix https://github.com/clojure-expectations/clojure-test/issues/30 by removing build-clj and using raw tools.build.
• Address https://github.com/clojure-expectations/clojure-test/issues/29 by providing a "hook" for more-> (but more work is needed).
• Address https://github.com/clojure-expectations/clojure-test/issues/27 by changing refer'd note in stub macros' docstrings.
Follow-up in #C2L9MU2RY#2023-02-0117:59ilevdClojureHaxe - experimental Clojure port written in Haxe targeting multiple platforms. Work in progress.
https://github.com/ClojureHaxe/ClojureHaxe#2023-02-0118:59Dustin Getzi am super excited about this, can you tell us more about your vision?#2023-02-0120:18ilevdWell, first of all it's just an experimental project and I don't want to promise to much. And at point it is, there are many questions answers on which I simply don't know. I started it 2 months ago without previous experience with Haxe. Fortunately, it's very similar to Java and thus porting clojure.lang.* Java classes is pretty straightforward. I don't know by myself where it will lead to, and probably all possibilities will be discovered later and, I hope, not only by me :) My vision is in the "Near future goals" section of the project - first of all making Clojure interpeter, that can be run on several platforms, at least by first evaluating clojure.core. Then trying to transpile clojure.core to Haxe. Later work may include implementing concurrency and parallelizm, diving in target-specific features and interop etc. But again, first of all I would like to concentrate on general Haxe codebase which can be usefull on many platofrms, rather than to dive in how to dynamically create classes on individual platform. If someone later decide to concentrate on concrete platform, e.g Python, Lua..., and to push to this repo or make fork, then nice, let it be :) As for me I would prefer to concentrate at something related to gamedev later, Hashlink/C++, game engines e.t.c. But again, I don't want to promise to much at this point :)#2023-02-0120:33Benjamin CCool! I've gotta say, I'm really looking forward to there being more and more emphasis on pure Clojure / cross-clojure libraries.#2023-02-0120:25nenadalmBackgammon - 2 player game (no ai, pwa, re-frame) on 1 device (link to the rules is in the menu)
• app: https://nenadalm.github.io/backgammon/
• repo: https://github.com/nenadalm/backgammon#2023-02-0200:46jjttjjThis seems awesome, I love backgammon and never thought of trying to implement it. The only problem is, I cannot for the life of me figure out how to play. I know the rules but what are the key commands/controls?#2023-02-0208:16nenadalmyeah, I am not much of an UX person 🙂. Feedback/suggestions are welcomed.
I wrote it mainly for phone, if I am somewhere with 1 more person to have something to play.
Rules mention that you throw dice on right side of the board. So from your point of view if you see 2 dice on the right side, it's your turn, if on the left side, it's the opponents turn (dice are also upside down for you).
You can also see available moves on the side of the board. So if you roll 5-4, you see available moves: 5, 4 and then if you move by 5, you see available moves: 4
The way you move is that you click on the point with checkers you want to move, the point will have green border (I was told this is not much visible, so I guess I'll have to figure out something else - like giving border to one checker or something) and then you click on the point you want to move to. The checker should move and you may continue with your 2nd move.
if it happens that you cannot use any of the rolls, the app won't even show you what you rolled (this seems to confuse people, so I might change it) and it's the opponents turn again.#2023-02-0208:16nenadalmis that understandable?#2023-02-0214:15jjttjjAh I got it now, thanks! I was not seeing the border when clicking on the checker you want to move last night and was getting stuck on the "select a valid move" step#2023-02-0214:17jjttjjI think just beefing up the boarder width on the selected point, and possibly adding one to the valid destinations would do wonders#2023-02-0218:06nenadalmSelected point is hopefully more visible now. In order to update, you just need to open the app twice (first time it loads old version from the cache and fetches new version, next time new version will be opened).
Not sure about highlighting the possible movements though. For now I'd like to try having it similar to the physical board game. Maybe I'll add some option some day which will do that.#2023-02-0218:34jjttjjOh that's better thanks#2023-02-0120:53dvlimanI put together a https://chrome.google.com/webstore/detail/cnn-chrome-extension/lbfjecjnndgobkgagllainiphdbhhalg?hl=en&authuser=0written in Clojurescript, shadow-cljs: https://github.com/dvliman/cnn-chrome-extension#2023-02-0208:44renewdoithttps://github.com/robertluo/fun-map released version 0.5.114, the first version of the 0.5 milestones.
Fun-map can be used in place of any plain map by support methods of a standard map. If you store specific particular values, computations could happen when you access it. Thus it can be used as a lazy map or manage dependencies and as a lifecycle management system like components or integrants without forcing you to compromise your basic design.
This version is starting to support ClojureScript.#2023-02-0219:25mpenetlatest https://github.com/mpenet/mina/ (helidon-nima+loom) is out, now based on helidon alpha4 -> https://github.com/mpenet/mina/#2023-02-0222:58lispycloudsAfter seeing a fair amount of production use, with pretty much no core changes and effectively being the goto lib for docker and podman, here is the 1.0.0 release of https://github.com/lispyclouds/contajners! An idiomatic, data-driven, REPL friendly clojure client for OCI container engines. Has all the latest support for docker and podman versions and compatible with clojure and #babashka 😄#2023-02-0302:25practicalli-johnhttps://github.com/practicalli/clojure-deps-edn - 2023 new year spring clean
Simplified many of the alias definitions that add a wide range of community tools when using Clojure CLI and deps.edn projects
• added :repl/reloaded to run Rebel rich terminal UI with a range of common libraries that support the REPL workflow
• added :dev/reloaded as above but without Rebel - to be used with other :repl/ aliases
• added :project/create to use seancorfield/deps-new project (`:project/new` remains for seancorfield/clj-new)
• deprecated :project/jar and :project/uberjar which used the archived depstar project in favour of using a tools.build based approach, e.g. as in https://practical.li/clojure/clojure-cli/projects/tools-build/ section
• deprecated many other aliases that are rarely needed, moving them into a deps-deprecated.edn file for posterity or curiosity - please let me know if any aliases in there are actively used
The Clojure CLI aliases used in the Practicalli Clojure book are also being updated to use the simplified set, along with a significant rewrite and upgrade to a very snazzy looking Material theme (with light and dark options)#2023-02-0410:02borkdudehttps://github.com/babashka/babashka: Native, fast starting Clojure interpreter for scripting
New releases in the past month: 1.0.170 - 1.1.173
Highlights:
• Support for data_readers.clj(c)
• Include https://github.com/babashka/http-client as built-in library
• Compatibility with clojure.tools.namespace.repl/refresh
• Compatibility with clojure.java.classpath (and other libraries which rely on java.class.path and RT/baseLoader)
• Compatibility with https://github.com/weavejester/eftest test runner (see https://twitter.com/borkdude/status/1616886788898885632)
• Compatibility with https://github.com/weavejester/cljfmt
• Support for *loaded-libs* and (loaded-libs)
• Support add-watch on vars (which adds compatibility with potemkin.namespaces)
• BREAKING: make printing of script results explicit with --prn
Check the https://github.com/babashka/babashka/blob/master/CHANGELOG.md for all the changes! babashka#2023-02-0611:58ericdalloHappy monday Clojurians!
Announcing https://github.com/ericdallo/jet.el: Parse edn/json/transit/yaml directly from Emacs using a magit-like interface ✨emacs
Besides the main entrypoint, the package has lots of commands to parse edn and:
• copy to clipboard
• to a new buffer
• print to messages
• just paste at cursor
Available at MELPA!#2023-02-0612:02borkdudePR welcome to jet to mention this tool :)#2023-02-0612:02ericdalloThanks, I'm working on that exactly now :p#2023-02-0612:06ericdallohttps://github.com/borkdude/jet/pull/125#2023-02-0612:09Christian JohansenAmazing stuff 👏#2023-02-0612:10Christian JohansenCan I somehow make keybindings for common pairs of options?#2023-02-0612:10Christian JohansenEg, make an interactive command that sets input to JSON, output to EDN, and copies to the clipboard#2023-02-0612:11Christian JohansenThis is possibly feedback to jet more than this glue, but it would be cool if jet was able to guess the input automatically - seems like it should be possible?#2023-02-0612:11ericdalloit's possible indeed, I'll add a example in the readme#2023-02-0612:11Christian Johansen👍#2023-02-0612:11ericdalloguess the input is a little bit harder I guess#2023-02-0612:12borkdudeI guess all json is valid transit, so how would you guess the difference?#2023-02-0612:12Christian Johansentry parsing it as transit first?#2023-02-0612:14Christian JohansenSorry, I misunderstood#2023-02-0612:15Christian JohansenIf transit can read both transit-specific JSON and just regular JSON, then there is no big problem? Default behavior with no -i could be to try to parse as edn, then as transit, then as yml.#2023-02-0612:16borkdudeI guess you could do this in emacs first and then see how it works out#2023-02-0612:29olynice I use jet extensively for formatting in emacs and converting between json and edn, I will go install, @U04V15CAJ curious if it would be possible to add in other map types like say python dict's as a quick way to convert, between languages I guess custom parsers would be needed ?#2023-02-0612:29borkdude@UU67HFS2X What does that look like?#2023-02-0612:30ericdallopretty similar to javascript maps: {'foo': 'bar'} IIRC#2023-02-0612:31borkdudein that case converting from JSON should already work?#2023-02-0612:34borkdudeexcept that JSON doesn't support single quotes I guess#2023-02-0612:47Christian Johansen(defun jet-to-clipboard (thing &optional args)
"Run jet for THING at cursor and ARGS copying to clipboard."
,,,)
It’s been a while since I wrote elisp… What’s thing @UKFSJSM38?#2023-02-0612:47olyGot me wondering now, sure I would have tried the json version, need to go find a python map now and try that#2023-02-0613:01olyI think where the python map fails is on the values, so you can have functions for example, the json parser does not like those, there maybe other data values but I imagine most are compatible#2023-02-0613:11ericdalloUsually (jet--thing-at-point) @U9MKYDN4Q, the region selected or current form at point#2023-02-0613:12Christian JohansenYeah, just found it 😅 Thanks 🙏#2023-02-0613:23ericdallo@U9MKYDN4Q I improved the readme mentioning how to customize the functions so you can keybind#2023-02-0613:23Christian JohansenCool, thanks#2023-02-0613:24Christian JohansenI ended up with these:
(require 'jet)
(defun copy-edn-as-json ()
(interactive)
(jet-to-clipboard
(jet--thing-at-point)
'("--from=edn" "--to=json"))
(keyboard-quit))
(defun copy-json-as-edn ()
(interactive)
(jet-to-clipboard
(jet--thing-at-point)
'("--from=json" "--to=edn" "--keywordize"))
(keyboard-quit))
(global-set-key (kbd "C-c j e j") 'copy-edn-as-json)
(global-set-key (kbd "C-c j j e") 'copy-json-as-edn)#2023-02-0613:24Christian JohansenNew Readme will save the next person some time 😄#2023-02-0613:24Christian JohansenAnyway, amazing stuff, thanks for your effort 👏#2023-02-0613:25ericdalloAdded your example to the readme how to keybind, thank you! gratitude#2023-02-0614:23robert-stuttafordthis is honestly so damn useful @UKFSJSM38 thank you (and thanks again to borkers!)#2023-02-0614:37zalkyNew: Simple https://en.wikipedia.org/wiki/DBSCAN clustering:
• Pure Clojure/Clojurescript implementation
Hope it is helpful! :rightwards_hand: 🎁 And more to come :face_with_open_eyes_and_hand_over_mouth:
https://github.com/zalky/dbscan-clj#2023-02-0617:44vemvnice! what lead you to write it? 🙂#2023-02-0617:47zalkyThanks! I'm releasing a library in the next couple of days for building Re-frame/React apps that includes a visual debugger that overlays graphical elements onto the live application. I needed a simple clustering algorithm for collecting and grouping certain visual elements on the screen.#2023-02-0617:49Carsten BehringWould you consider to "bind" your library closer to the upcoming Clojure data science stack by
using a "tech.ml.dataset" (a column oriented table) as input data, instead of vector-of-maps
TMD is living here:
https://github.com/techascent/tech.ml.dataset
If this is the case, you could as well considre to integrate the DBSCAN algorithm in one of the existing" collections of algorithms working on the same data format.#2023-02-0617:52zalkySure, I actually use tech.ml.dataset quite regularly, it's fantastic. But never thought to connect the two! I'd have to think about what that would entail, are there examples in the code-base of other grouping or clustering bindings I could look at as a pattern to follow?#2023-02-0618:08Carsten BehringIt should be very easy . The "core" of your algorithm could even stay as is.
You would just convert from dataset to vector-of-maps, run your stuff and convert back to a tech.ml.dataset
This might come with small performance penalty (versus rebuilding the algorithm using the TMD primitives),
but probably negligible.
So you just need a functions like yours :
https://github.com/zalky/dbscan-clj/blob/bb7aa0fae89cd9c8477278b0aae70e443517284c/src/dbscan_clj/core.cljc#L88
but it takes a "tech.ml.dataset" as input.
(and reurn such dataset as well), so things can be chained easely.
Probably you need some options to define on "which columns" your clustering is performed.#2023-02-0618:13Carsten BehringThis new code would be a kind of "adapter" to TMD.
So where "physically" place your original code and teh adapter is a question to answer.
Doing the adapter will require a dependency to tech.ml.dataset , so maybe you code in
https://github.com/zalky/dbscan-clj
wants to avoid that.#2023-02-0618:19Carsten BehringI would maybe even suggest to have the "adapter" standalone,
depending on
io.zalky/dbscan-clj {:mvn/version "0.1.0"}
and
techascent/tech.ml.dataset {:mvn/version "7.000-beta-27"}
and it just does the data conversion and calls dbscan and converts back.
A few lines of code in my view.#2023-02-0618:20Carsten Behring(one reason being ClojureScript compatibility). TMD is a Clojure library, not compatible with ClojureScript#2023-02-0618:28zalkyYes, I agree with these points. I'll take a bit of a closer look to see what alternatives there are for integrating with tech.ml.dataset's abstractions. There might be some protocols or interfaces that are easy to implement. Thanks for planting the seed, I don't think I would have made the connection otherwise.#2023-02-0617:25hlshipcom.walmartlabs/lacinia 1.2
Lacinia is an open-source implementation of the GraphQL specification, in Clojure.
GraphQL is an outstanding approach to getting diverse clients and servers exchanging data cleanly and efficiently.
GitHub repo: https://github.com/walmartlabs/lacinia
Documentation: https://lacinia.readthedocs.io/en/latest/
Lacinia 1.2 fills in some gaps in Lacinia's functionality. Notable changes:
• Direct control over the Executor used for callbacks
• Subscription streamer functions are now on-par with ordinary field resolver functions by supporting directives and supporting access to the preview API
• The entire https://lacinia.readthedocs.io/en/latest/tutorial has been rewritten to be more clear, and use modern standards (such as tools.deps for the build, and using Pascal Case field names).
https://github.com/walmartlabs/lacinia/issues?q=is%3Aclosed+milestone%3A1.2#2023-02-0622:53Sam RitchieAnnouncing v0.3.0 of clerk-utils , a library designed to help write interactive docs like https://clerk-utils.mentat.org with #clerk.
This release adds mentat.clerk-utils.build/{build!,serve!,halt!} functions for building custom ClojureScript bundles for #clerk. This lets you use ~any JS or CLJS library when writing custom viewers in Clerk. See the interactive docs notebook section on Custom ClojureScript for more detail: https://clerk-utils.mentat.org/#custom-clojurescript-builds
0.3.0 also adds a clerk-utils/custom #deps-new template (https://github.com/mentat-collective/clerk-utils/tree/main/resources/clerk_utils/custom) for generating a Clerk project with all of the custom ClojureScript stuff baked in. (Here’s https://github.com/mentat-collective/clerk-utils-custom-template.)
• Release notes: https://github.com/mentat-collective/clerk-utils/releases/tag/v0.3.0
• Clojars: https://clojars.org/org.mentat/clerk-utils
• Github: https://github.com/mentat-collective/clerk-utils
#2023-02-0622:59quollhttps://github.com/quoll/donatello v0.0.1
A simple Turtle writer.
This library converts basic Clojure structures into formatted turtle files.
It accepts nested maps, such as used by Asami, or identifiers paired with simple maps.
For simplicity, keywords are treated as QNames/CURIEs, and will be written out this way.#2023-02-0700:02Cora (she/her)what's a Turtle in this context?#2023-02-0701:14quollhttps://www.w3.org/TR/turtle/#2023-02-0701:16Cora (she/her)ahhh ok #2023-02-0701:17Cora (she/her)I really don't know much about RDF#2023-02-0701:17Cora (she/her)thanks 😊 #2023-02-0701:17Cora (she/her)maybe I should read about it#2023-02-0701:17quollIt’s been my career for over 20 years, so… 😄#2023-02-0701:18Cora (she/her)so ask you instead?? 😜 #2023-02-0701:18quollI’m more than happy to help. But if you want something to read, you can start https://www.w3.org/TR/rdf11-primer/#2023-02-0712:54Eugencool name 🙂#2023-02-0713:26quollWell, the partner library (for parsing Turtle files) is called https://github.com/quoll/raphael #2023-02-0713:36Eugenmakes sense 🙂#2023-02-0714:06zalkyNew: https://github.com/zalky/reflet is a set of tools for building https://github.com/day8/re-frame + React based web apps with graph and non-graph data models. This includes:
1. Entity references and their lifecycle management
2. Performant multi-model db with graph queries and mutations
3. Simple but powerful hierarchical FSMs
4. JS and DOM interop utilities
5. Novel API-driven visual debugging of complex apps (don't sleep on this! see the short vid below)
Reflet aims to be a natural progression on top of Re-frame, sort of like Re-frame++ (or Fulcro for Re-frame). Its main design goals are:
1. A la carte feature set: it is not a "framework", so use as much or as little of it as you want
2. Works with existing Re-frame applications: iterative, minimal approach to integration, so big re-writes can be avoided
3. Graph and non-graph data models can be mixed freely with a single source of truth: a Clojure map
4. A single macro encourages excellent, pluggable APIs
5. Highly performant and stable: Reflet has already been deployed in complex data-driven production apps for years (e.g. in Bioinformatics, Business analytics... )
Hope it is helpful! :rightwards_hand: 🎁 And more to come :face_with_open_eyes_and_hand_over_mouth:
https://github.com/zalky/reflet#2023-02-0714:53robert-stuttafordimpressive work, nice one!#2023-02-0715:06zalkyThanks!#2023-02-0715:44pezThis looks yummy! CC: @UGDTSFM4M#2023-02-0715:58DrLjótssonIndeed!#2023-02-0718:18hlshipThis may be just what I need for a side project I've been thinking about for years.#2023-02-0718:49respatializedwow, that visual debugger is very impressive! like a Smalltalk object viewer but for dataflow. #2023-02-0718:49zalkyAwesome, hope it turns out to be helpful!#2023-02-0718:52zalkyThanks: the debugger itself is kind of an example of what the library is capable of: it was written entirely in Reflet to avoid having to inline any big JS dependencies.#2023-02-0719:12respatializedThat also sounds very aligned with the Smalltalk spirit!#2023-02-0806:24robert-stuttafordthe debug windows thing is super inspiring @U0HJK8682!#2023-02-0717:27borkdudehttps://github.com/babashka/sci: Configurable Clojure/Script interpreter suitable for scripting and Clojure DSLs
SCI is used in https://github.com/babashka/babashka, https://github.com/babashka/nbb, https://github.com/nextjournal/clerk, https://github.com/BetterThanTomorrow/joyride/ and many https://github.com/babashka/sci#projects-using-sci projects.
It is now easier to add JS libraries to your SCI ctx, so users can require and use them:
(ns sci.examples.js-libs
(:require ["fs" :as fs]
[sci.core :as sci]))
(sci/eval-string "
(require '[\"fs\" :as fs])
(fs/existsSync \"README.md\")"
{:js-libs {"fs" fs}})
;;=> true
This and several other improvements in v0.7.38 (2023-02-07)
• Add sci/add-js-lib! for adding js libraries including corresponding :js-libs init option
• Speed up Java interop around 5x by caching method lookups
• Allow destructucturing in CLJS defmethod
• https://github.com/babashka/sci/issues/862: fix JS constructor from class in CLJS namespace
• Improve error location in macroexpansion
• https://github.com/babashka/sci/issues/867: Support add-watch and remove-watch on sci.lang.Var
• https://github.com/babashka/sci/issues/648: implement *loaded-libs* and (loaded-libs)
• Expose new parse-next+string function
• Support qualified method names in proxy while ignoring the namespace
• Support read with non-indexing reader, fixes https://github.com/babashka/babashka/issues/1465
• Improve top level macro expansion error location
• Fix pprinting vars
• Add reader-conditional to core vars
• Fix https://github.com/babashka/babashka/issues/1482: make loading of libs thread safe#2023-02-0718:22Matthew DowneyAnnouncing v1.0.1 of https://github.com/matthewdowney/rich-comment-tests (clojure, babashka), with one bugfix for a specific mechanism of running all tests from babashka, plus a README section on https://github.com/matthewdowney/rich-comment-tests#use-with-babashka-tasks.#2023-02-0912:24borkdude@UP7RM6935 I'm working on a fix in rewrite-clj but with that fix in place, the only tests that are failing are for rct.
https://github.com/clj-commons/rewrite-clj/pull/215
I'm looking into why this is happening but I have difficulty grokking the failing tests. Is this something you could help with?#2023-02-0915:40Matthew DowneyI must be abusing the rewrite-clj API somewhere, let me check#2023-02-0915:46Matthew Downey@U04V15CAJ Nothing coming to mind immediately from looking at the failing tests, so I'll use your PR branch to try some stuff locally. I don't think it has to do with the 1.0.0 -> 1.0.1 bugfix. I won't be at the computer until the evening though. Sorry to be the one library holding this up!#2023-02-0915:47borkdudeNo worries :) Your library might be testing something valuable that I accidentally broke :)#2023-02-0915:47borkdude(cc @UE21H2HHD)#2023-02-0915:48Matthew DowneyBtw @UE21H2HHD the canary tests of known dependencies are a cool pattern, I hadn't seen that before#2023-02-0915:48borkdudeBabashka also tests a plethora of libraries in every commit#2023-02-0915:50borkdudehttps://github.com/babashka/babashka/blob/master/test-resources/lib_tests/bb-tested-libs.edn#2023-02-0915:51Matthew DowneyMakes a lot of sense!#2023-02-0915:52lreadGonna take a deep peek sometime very soon!#2023-02-0916:59lreadI'm missing a tiny bit of context here. Was there some existing test suite that helped you discover rewrite-clj has an issue? I'd like to rerun that (if there is one).#2023-02-0917:01borkdude@UE21H2HHD For full context:
I discovered an issue with rewrite-clj through clj-kondo. The issue is that this crashes:
(rewrite-clj.node/sexpr (rewrite-clj.node/coerce "\\s+"))
I submitted two patches which solve this problem. One of them broke tests in rich-comment-tests. I closed that one now. The other one works.#2023-02-0917:02borkdudeI don't think @UP7RM6935 has to look into this anymore, probably#2023-02-0917:03borkdudeI tested rich-comment-test by using local/root in deps.edn and then running:
bb test-clj
#2023-02-0917:06lreadAh ok. Thanks, did not understand where the discovery occurred.#2023-02-0917:13borkdudeHere: https://github.com/clj-kondo/clj-kondo/issues/1987#2023-02-0917:14borkdudeI realize I forgot to add that context in the original issue, sorry#2023-02-0917:14lreadNo problemo!#2023-02-0807:05Matthew Davidson (kingmob)https://clojars.org/org.clj-commons/dirigiste/versions/1.0.3 is now available. Many thanks to @arnaudgeiser for contributing. This includes a bunch of minor changes and bugfixes for Aleph users, including:
• Fixed bug ensuring queues are properly removed
• Fixed bug in awaitTermination return value
• Fixed pool race condition
• Added basic JMH benchmarks
• Simplified locking strategy
If you're impatient, update now, but if not, it will be available as part of Aleph in the next release or two.#2023-02-0810:14Matthew Davidson (kingmob)Announcing the release of https://clojars.org/aleph/versions/0.6.1. This version contains a variety of bug fixes and speed-ups. Also upgrades to the latest versions of Manifold, Dirigiste, and Netty.
Big thanks to @arnaudgeiser, who tackled most of these changes!#2023-02-0821:41Sam RitchieAnnouncing v0.2.0 of Mafs.cljs ! This library provides a #C0620C0C8 interface to the https://mafs.dev 2d interactive mathematical visualization library, all backed by SVG.
v0.2.0 adds better #C015LCR9MHD integration (https://mafs.mentat.org/#mafs.cljs-via-sci) and a #C019ZQSPYG6 template called mafs/clerk that creates a project fully configured for Mafs.cljs + #C035GRLJEP8 use, just like I do in the https://mafs.mentat.org. The templates https://github.com/mentat-collective/Mafs.cljs/tree/main/resources/mafs/clerk.
• Clojars: https://clojars.org/org.mentat/mafs.cljs
• Github: https://github.com/mentat-collective/mafs.cljs
• Questions / discussion in #C041G9B1AAK #2023-02-0914:12eval2020New, overhauled release of https://github.com/eval/deps-try#deps-try, a tool to quickly try out Clojure dependencies on rebel-readline:
$ deps-try metosin/malli
Give it a spin:
$ bbin install io.github.eval/deps-try
Changes:
• Install via https://github.com/babashka/bbin
• Interrupting an operation does not kill the REPL-session
• Support for git-urls and branch/tag, e.g. deps-try some-branch
• Conveniently toggle some Clojure settings, e.g. clojure.core/*print-namespace-maps*
• Central history-file (following XDG spec)
• Resolves dependencies in isolation (as much as possible), i.e. ignoring deps.edn
• Upgraded deps for (now vendored) rebel-readline#2023-02-0918:42Noah Bogart$ deps-try clj-kondo/clj-kondo
Syntax error compiling at (eval/deps_try/try.clj:106:28).
No such var: fs/xdg-data-home
Full report at:
/tmp/clojure-4707535182527186318.edn
#2023-02-0918:43Noah Bogartlooks like a cool app, i'm excited to try it out when i can get it working#2023-02-0920:41eval2020@UEENNMX0T could you try installing again? (should become v0.3.1)#2023-02-0921:42borkdude@U04V6FEES
$ deps-try
[Rebel readline] Type :repl/help for online help info
user=> :deps/try clj-kondo/clj-kondo
user=> (require '[clj-kondo.core :as clj-kondo])
Execution error (FileNotFoundException) at user/eval7264 (R
#2023-02-0922:39Eric ScottFairly significant upgrade to two libraries supporting RDF in Clojure
• ont-app/igraph-jena ports the Jena RDF store to the ont-app/igraph protocols
• ont-app/rdf provides a layer of logic for dealing with RDF-baed implemantaions of igraph generally
https://github.com/ont-app/igraph-jena
https://github.com/ont-app/rdf#2023-02-1000:54kennytiltonI ❤️ RDF.#2023-02-1000:56kennytiltonAnd I ❤️❤️ GDB even more.#2023-02-1001:58kennytiltonLooks pretty solid at a glance. Crazy question: is there any notification mechanism in the protocol? My reactive hack likes "push", if you will. Subscribe/notify, yadda yadda.#2023-02-1002:36Eric ScottNo there's nothing like that. This seems orthogonal to graphy behavior, or maybe I'm not clear on what you mean?#2023-02-1002:42Eric ScottWould add-watch do the trick? https://clojure.github.io/clojure/clojure.core-api.html#clojure.core/add-watch#2023-02-1003:21kennytilton"add watch" would do the trick nicely. :thinking_face: Might be fun building a reactive layer around iGraph. Do you have a backend for any of Franz's DBs, such as AllegroCache and AllegroGraph? Reminds me, I once rolled my own GDB-lite atop Postgres.#2023-02-1004:35Eric ScottNo so far I've just done jena and grafter, which wraps rdf4j if IIRC (badly needs a refresher). I'm also trying to extend it to other graph architectures. So many graphs, so little time :-)#2023-02-1013:26kennytiltonTell me about it. I have UIs for the Web, CLJS and native JS, React, ReactNative, and now Flutter. We should start a self-help group. Anyway, next Q: are there other GDB protocols out there like iGraph? Any standards process ongoing?#2023-02-1013:36Eric ScottNot that I know of, though it seems that datalog (following datomic's example) is the most common way of querying graphs in clojure-native implementations.#2023-02-1013:39Eric Scottont-app has https://github.com/ont-app/datascript-graph and https://github.com/ont-app/datomic-client, both of which are overdue for some sprucing up.#2023-02-1013:43Eric ScottIf you like SPARQLing, this is an interesting clojure-y approach: https://github.com/yetanalytics/flint#2023-02-1014:31kennytiltonI think a low-level fact maintenance API will be the key, and I am sure you have that. My objective will be transparent persistence of reactive objects, basically just maps with individually reactive properties.
I did this atop an early Franz RDF product, went well.#2023-02-1014:36Eric ScottDo you find the igraph protocol spec (and maybe ont-app/rdf) fairly approachable? If so, I'd welcome your extending it to your Allegrograph .#2023-02-1014:37Eric Scott... moneybags! :-)#2023-02-1014:49kennytiltonWell, I am old enough to remember when people were able to sell software, so a proprietary DB is fine. Maybe we can get them to pay for the work. 🙂
btw, my RDF hack also made triples themselves reactive, storing formula code for eval as needed. As long as the right software was reading/writing the DB, mind you. I did that as well with Franz's old AllegroStore, a persistent CLOS solution. Very powerful.
I did not stare hard at the protocol, I could tell from a distance that it was solid. 🙂
What I would do is a proof-of-concept using the simplest, working implementation and then worry about scaling to other DBs and more features.#2023-02-1014:50Eric ScottGot a pointer to your 'hack'?#2023-02-1014:52Eric ScottYeah I remember Allegro CL fondly. Even paid for my own license for a while in the 00's. Actually it was a talk by Jans Aasman about AllegroGraph that got me interested in RDF#2023-02-1014:55Eric ScottThat was about the same time I found Clojure.#2023-02-1015:44kennytiltonHad to copy TripleCells in from another project. Good thing you know Lisp. 🙂 https://github.com/kennytilton/cells/tree/main/triple-cells Maybe start with hello-world.lisp where I test that the DB is self-updating.#2023-02-1018:11kennytiltonBtw, I had a fun moment using Gruff to inspect the TripleCells encoding of the hello-world.lisp example, including all the implementation triples used to record dependencies.#2023-02-1002:33Matthew DowneyJust released v1.0.2 of https://github.com/matthewdowney/rich-comment-tests/ which is compatible with Babashka >=1.1.171 (now rct's JVM and bb code is identical)[1]. Thanks for the heads up @borkdude!
[1] https://github.com/matthewdowney/rich-comment-tests/issues/18#2023-02-1014:42vlaaadA new version of reveal https://vlaaad.github.io/reveal/ is out (Free: 1.3.280, Pro: 1.3.359)! It introduces highlighting of illegal booleans. If you wonder, what the hell is illegal boolean and why they are a problem, you can read the https://vlaaad.github.io/illegal-booleans. In short, it's a boolean that's neither Boolean/TRUE nor Boolean/FALSE , and it messes with Clojure's equality semantics implementation. Discuss here or in #CUDTFQ152#2023-02-1019:57oliyI remember running into this problem when data was being sent over the wire through hazelcast. Couldn't believe my eyes when I saw a false being evaluated as true!#2023-02-1015:35stathissiderisbb-dialog gets support for treeview in v0.3! #babashka https://github.com/pixelated-noise/bb-dialog#2023-02-1121:55seancorfieldHoneySQL -- Turn Clojure data structures into SQL -- com.github.seancorfield/honeysql {:mvn/version "2.4.979"} -- https://github.com/seancorfield/honeysql -- this is the third release since the last announcement here:
• Address https://github.com/seancorfield/honeysql/issues/459 by making all operators variadic (except := and :<>).
• Address https://github.com/seancorfield/honeysql/issues/458 by adding registered-*? predicates.
• (2.4.972) Address https://github.com/seancorfield/honeysql/issues/456 by allowing format to handle expressions (like 1.x could) as well as statements. This should aid with migration from 1.x to 2.x.
• (2.4.969) Fix https://github.com/seancorfield/honeysql/issues/454 by allowing - to be variadic.
• (2.4.969) Address https://github.com/seancorfield/honeysql/pull/452 by adding :replace-into to the core SQL supported, instead of just for the MySQL and SQLite dialects (so the latter is not needed yet).
• (2.4.969) Address https://github.com/seancorfield/honeysql/issues/451 by adding a test for it, showing how :nest produces the desired result.
• (2.4.969) Address https://github.com/seancorfield/honeysql/issues/447 by updating GitHub Actions and dependencies.
• (2.4.969) Address https://github.com/seancorfield/honeysql/issues/445 and https://github.com/seancorfield/honeysql/issues/453 by adding key/constraint examples to CREATE TABLE docs.
Follow-up in #honeysql#2023-02-1215:33pez#joyride brings Emacs-like hackability to VS Code. (Slightly weaker reach into the editor, much lovelier scripting language.) In https://github.com/BetterThanTomorrow/joyride/releases/tag/v0.0.33 you get rewrite-clj support! joyride
• https://github.com/BetterThanTomorrow/joyride/issues/150#2023-02-1216:07Quentin Le Guennecvery cool thanks!#2023-02-1216:29Alex Miller (Clojure team)https://github.com/clojure/tools.gitlibs 2.5.190
• Fix problem with blocking on big git output (particularly an issue for tag verification on git repos with large number of tags)#2023-02-1216:30Alex Miller (Clojure team)https://github.com/clojure/tools.deps 0.16.1281
• Update to tools.gitlibs 2.5.190
• TDEPS-235 Disallow http :mvn-repos#2023-02-1216:38Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.11.1.1224
• Fix issue with git tag verification for repos with a large number of tags
• https://clojure.atlassian.net/browse/TDEPS-235 - Disallow http :mvn/repos
• https://clojure.atlassian.net/browse/TDEPS-236 - Add rlwrap -m to clj for multiline editing
#2023-02-1223:50Matthew Downeyhttps://github.com/matthewdowney/excel-clj v2.2.0 — upgraded dependencies and added a new helper to allow writing clojure.pprint/print-table to Excel sheets instead of stdout.#2023-02-1316:11lreadPomegranate 1.2.23 - A sane Clojure API for Maven Artifact Resolver + dynamic runtime modification of the classpath
Highlights from the https://github.com/clj-commons/pomegranate/blob/master/CHANGELOG.adoc#v1.2.23:
• Bump stale deps, some of which had vulnerabilities
• Don’t accept empty but truthy :repositories (thanks @vemv!)
• General quality
◦ Review and update docs and docstrings
◦ Update automated testing to cover Linux, Windows, current JDKs, and Clojure v1.4+
◦ Add automated check for vulnerabilities in dependencies
◦ Address all reflection warnings (thanks @vemv!)
◦ Add automated clj-kondo linting
◦ Add automated release workflow
◦ Dependencies are now specified only once
◦ Review and update classpath-related tests
Pomegranate is one of the many projects under the loving care of https://github.com/clj-commons.
Drop by #C04KJME1UPL for chat/support.#2023-02-1316:40vemvcheers @UE21H2HHD 🍻#2023-02-1317:21Michaël SalihiNo Pomegranates ! 😄
https://www.youtube.com/watch?v=tnLLrnZVwFI#2023-02-1316:55Dustin GetzElectric Clojure v2 – a signals DSL for fullstack web UI, with compiler-managed network sync https://github.com/hyperfiddle/electric Also see HN discussion on the front page today! Community is at #hyperfiddle#2023-02-1317:07Dustin GetzI'll link the HN thread tomorrow, for now please find it on the front page to not trigger vote ring penalty#2023-02-1317:16borkdudev2? :)#2023-02-1319:19robert-stuttafordgreat job @U09K620SG 👏#2023-02-1320:42Dustin GetzThanks robert, we have a great team (@U053XQP4S @U2DART3HA @U09FL65DK), and specifically want to highlight @U053XQP4S the architect who turned this concept into a bulletproof implementation#2023-02-1408:06henrikFantastic! Congrats everyone, and especially @U09FL65DK 🙂#2023-02-1408:24Lidor CohenAmazing work everyone! Can't wait to see where this one goes :star-struck:#2023-02-1411:05Hendrik@U09K620SG This is amazing. 🎉#2023-02-1414:40Dustin GetzHere is the HN thread, I answered a lot of questions:
• https://news.ycombinator.com/item?id=34771771
• for clojure-y discussion, the https://www.reddit.com/r/Clojure/comments/11146ic/hyperfiddleelectric_formerly_photon_has_been_made/ is a good place and will send me notifications
Also see the past coverage which answers many FAQs:
• https://news.ycombinator.com/item?id=31217448 (2022) and https://hyperfiddle.notion.site/UIs-are-streaming-DAGs-e181461681a8452bb9c7a9f10f507991
• https://news.ycombinator.com/item?id=28630209 (2021)#2023-02-1411:18Wernerhttps://github.com/wkok/openai-clojure - Clojure wrapper functions to drive the current https://platform.openai.com/docs/introduction
Submitted to OpenAI as a community library, awaiting approval 🤞
https://github.com/wkok/openai-clojure#2023-02-1411:36flowthingVery cool, thanks for making this. 🙂#2023-02-1421:24Carsten BehringI am using Azure OpenAI API.
It has a different API endpoint (and different per customer),
and it support only one operation (so far) namely "completions"
But the parameters for the completion are the same.
Maybe we could extend openai-clojure to support both ?
I opened https://github.com/wkok/openai-clojure/issues/2 to discuss further, if you are interested.#2023-02-1521:09Wernerhttps://github.com/wkok/openai-clojure v0.2.0 released
• Added Azure OpenAI Support (thanks @U7CAHM72M)#2023-02-1609:54BenjaminPlugging my openai emacs bindings:
if you are interested in having some commands https://github.com/benjamin-asdf/openai-api.el (alpha)
I am using this with quite some effect. Its great with shell commands also#2023-02-1416:00borkdudeBabashka https://github.com/babashka/http-client: HTTP client for Clojure and babashka built on java.net.http
0.1.4
• Implement :multipart uploads, largely based on https://github.com/gnarroway/hato's implementation
• https://github.com/babashka/http-client/issues/13: Add a default user-agent header: babashka.http-client/<released-version> (https://github.com/lispyclouds)
#2023-02-1417:29Alex Miller (Clojure team)FYI, the Ask Clojure site will be undergoing some maintenance over the next hour and may experience a short period of downtime#2023-02-1515:35Callum Williams👋 Hi everyone! Is there a specific channel set up for Clojure related job postings?#2023-02-1515:35Ivar Refsdalthere is #C05006WDW#2023-02-1515:35Mateusz Mazurczak#C05006WDW and #C06B40HMY and #C0KL616MN#2023-02-1515:35Callum WilliamsAwesome! Thanks for your help#2023-02-1515:59dpsuttonreally no need to use #C06MAR553 for this. please don’t post random questions here#2023-02-1618:09jpmonettasReleased FlowStorm 3.3.320
FlowStorm is a Clojure and ClojureScript tool suite which contains a debugger and types docs generation tooling
This release doesn't add any new features but fixes a bunch of issues reported by users.
Since last announced release :
• Upgrades to openjfx 19.0.2.1 which solves the tool failing to start on hombrew openjdk under macos ventura
• Improves deep function instrumentation (with one click you can instrument a fn and recursively any called fn)
• Fix type hinted fn instrumentation on clojure 1.10
• Support instrumenting functions forms like (let [...] (defn foo [] ...))
• Fix code instrumentation where libraries like potemkin/import-vars are used
• Improve docs file generation
• Fix namespace instrumentation for files that end with a comment
• Fix OS theme detection exceptions
• And more
Thanks to everybody who reported issues, and a big thanks to Roam Research and people sponsoring the project.
Repo : https://github.com/jpmonettas/flow-storm-debugger
User guide : https://jpmonettas.github.io/flow-storm-debugger/user_guide.html
Cheers!#2023-02-1622:22Noah BogartInitial release of https://github.com/NoahTheDuke/spat - Next-Generation kibit-style linter
Reads clojure/script code, checks for known "bad forms", and prints the more idiomatic form:
[:not-nil?] src/noahtheduke/spat.clj - 756:14
(not (nil? ?x))
Consider using:
(some? ?x)
Decided to release this in the barest bones version to see how folks like it. It can be run as a command-line tool with @borkdude’s bbin, or turned into an uberjar and run manually. I hope to get it even faster (maybe with GraalVM?), but this is a good place to start.#2023-02-1622:31borkdudebbinstall should probable be bbin install :)#2023-02-1622:31borkdudeIf I understand correctly, it runs with bb, pretty cool#2023-02-1622:32borkdudeI may have found one false positive: it flags #(do [%1 %2]) as a redundant do :)#2023-02-1622:34borkdude@UEENNMX0T If you can emit output like clj-kondo's text output, I think it's pretty easy to hook this up to emacs#2023-02-1622:34borkdudeE.g. copy and modify this plugin a bit: https://github.com/borkdude/flycheck-clj-kondo#2023-02-1622:36Noah BogartExcellent, I don’t use emacs but I do gather all of the data and can output it.#2023-02-1622:36borkdudewhat editor are you using? intellij? I've had similar stuff with clj-kondo + intellij based on the same output#2023-02-1622:39borkdudehttps://github.com/clj-kondo/clj-kondo/blob/master/doc/editor-integration.md#file-watchers--installed-binary#2023-02-1622:44Noah BogartI use neovim and rely singularly on clojure-lsp’s errors. But i can set this up#2023-02-1622:45borkdudeok, if you spit out clj-kondo's format, then neovim can also pick this up using ale or some other stuff, check out the same editor-integration.md link, but for vim#2023-02-1622:45borkdudeit's a format that's widely supported#2023-02-1622:46Noah BogartExcellent#2023-02-1622:46Noah BogartThanks so much for all your help#2023-02-1622:50borkdudeBtw how much did it help in speed to use s-expressions rather than rewrite-clj nodes?#2023-02-1622:51Noah BogartRoughly the same as clj-kondo’s impl, much faster than raw rewrite-clj#2023-02-1708:01The ContiniumYou can also integrate into neovim with null-ls.nvim. I use this and it works well. Here is an example parsing a cli program https://github.com/jose-elias-alvarez/null-ls.nvim#parsing-cli-program-output #2023-02-1709:15ouvasam9702#2023-02-1709:16imreIncorrect PIN. 2 attempts remaining.#2023-02-1709:16timoPlease provide your card number for further debugging#2023-02-1712:48borkdudehttps://github.com/clj-kondo/clj-kondo: static analyzer and linter for Clojure code that sparks joy ✨
2023.02.17
• https://github.com/clj-kondo/clj-kondo/issues/1976: warn about using multiple bindings after varargs (`&`) symbol in fn syntax
• Add arity checks for core def
• https://github.com/clj-kondo/clj-kondo/issues/1954: new :uninitialized-var linter. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#uninitialized-var.
• https://github.com/clj-kondo/clj-kondo/issues/1996: expose hooks-api/resolve. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/hooks.md#api.
• https://github.com/clj-kondo/clj-kondo/issues/1971: false positive :redundant-fn-wrapper with syntax-quoted body
• https://github.com/clj-kondo/clj-kondo/issues/1984: lint java constructor calls as unresolved-symbol when using dot notation.
• https://github.com/clj-kondo/clj-kondo/issues/1970: :dynamic-var-not-earmuffed should be opt-in
• https://github.com/clj-kondo/clj-kondo/issues/1972: type hint aliases should not result in unresolved symbol
• https://github.com/clj-kondo/clj-kondo/issues/1951: include end locations in :line-length linter
• https://github.com/clj-kondo/clj-kondo/issues/1987: Fix escaping of regex literal string in :macroexpand
• https://github.com/clj-kondo/clj-kondo/issues/1980: make support for ignoring warnings in generated hooks explicit
• https://github.com/clj-kondo/clj-kondo/issues/1979: allow :level :off in :discouraged-var config on var level
• https://github.com/clj-kondo/clj-kondo/issues/1995: clj-kondo.lint-as/def-catch-all doesn't emit locations, fixes navigation for lsp
• https://github.com/clj-kondo/clj-kondo/issues/1978: false positive type error with symbol argument + varargs
• https://github.com/clj-kondo/clj-kondo/issues/1989: don't analyze location metadata coming from :macroexpand hook (performance optimization)
Thanks to https://github.com/sponsors/borkdude, contributors and users for making this project possible! gratitude#2023-02-1718:04fogus (Clojure Team)https://github.com/clojure/tools.namespace v1.4.1
• Fixes https://clojure.atlassian.net/browse/TNS-6: Attempt to reload deleted file
• Fixes https://clojure.atlassian.net/browse/TNS-24: Broken tracker after mis-named namespace
• Adds https://clojure.atlassian.net/browse/TNS-55: Provide source file info in find functions#2023-02-1718:23borkdude"`name` is forever nom" in action!
https://github.com/clojure/tools.namespace/commit/3125f4bfbe91db04331f4abbf378b9a422604a47#diff-e5fd89fba820de66c25e2bffa57d9089a34aa9d52c77b73d693b319697a800afR156#2023-02-1718:25fogus (Clojure Team)my dreams have become reality!#2023-02-1718:31jpmonettasnice thanks! I remember asking for that TNS-55 https://ask.clojure.org/index.php/8826/would-nice-tools-namespace-find-functions-return-file-info#2023-02-1718:25fogus (Clojure Team)my dreams have become reality!#2023-02-1719:47Filipe SilvaObsidian Babashka version 1.0.5, and now on the official plugin list!
> Obsidian Babashka is a plugin for https://obsidian.md/ that lets you run https://clojure.org/ and https://clojurescript.org/ code blocks via https://babashka.org/ and https://github.com/babashka/nbb respectively.
>
> The main usecase for this plugin is scripting in the context of your vault documents.
Source: https://github.com/filipesilva/obsidian-babashka
Install link: https://obsidian.md/plugins?id=babashka#2023-02-1820:24Cora (she/her)I just started using obsidian a few months back and had no idea there was something like this!!! so awesome!#2023-02-1820:26Filipe SilvaIt was only started last month really :D#2023-02-2014:52Daniel JompheFunny, I was thinking just this morning how it would be nice to have a CLJS scripting option in Obsidian if it isn't already available. Well, then, it is. 🙂#2023-02-1816:37Sam RitchieAnnouncing v0.4.0 of clerk-utils , a library designed to help write interactive docs like https://clerk-utils.mentat.org with #clerk.
This release adds the mentat.clerk-utils.viewers/q macro for writing custom viewers, like Clojure’s quote but with support for namespace alias resolution and splicing via ~ and ~@. https://clerk-utils.mentat.org/#q-macro-for-viewers.
• Release notes: https://github.com/mentat-collective/clerk-utils/releases/tag/v0.4.0
• Clojars: https://clojars.org/org.mentat/clerk-utils
• Github: https://github.com/mentat-collective/clerk-utils#2023-02-2012:52Ertugrul CetinEnion Online: A 3D multiplayer PvP battle game between orcs and humans, written in Clojure and ClojureScript, feel free to share your thoughts!
It's a pre-alpha game, so there might be some issues.
I'm using the PlayCanvas game engine, re-frame, and reagent for the UI.
For the backend, I'm mainly using Manifold and Aleph. Additionally, I'm using my own async library called procedure.async.
Game link: http://alpha.enion.io#2023-02-2013:00Lars Kristian Maron TelleHow did I chat? 😄#2023-02-2013:05Lars Kristian Maron TelleI reset the storage, and figured it out. (I had been too quick with clicking through the hints.)#2023-02-2013:07Lars Kristian Maron TelleFor others in the same situation: you activate the input field in the chat window by pressing "Enter".#2023-02-2013:14p-himikNote: gotta disable adblock for it to work apparently. Otherwise getting stuck in the loading screen.#2023-02-2013:14p-himikOh, there's also a "DMCA Takedown notice" in JS console @U0UL1KDLN.#2023-02-2013:41Ertugrul CetinThanks for the info @U2FRKM4TW#2023-02-2013:43Ertugrul CetinI'm also experiencing some out-of-memory issues that are causing the VM to restart. I assume that the reason is because the VM type is shared.#2023-02-2014:17jumarIs it just me or the D key doesn't work?#2023-02-2014:36p-himikSure you don't have something like Vimium extension that intercepts that?#2023-02-2118:20jumarYep, that’s probably it :)#2023-02-2023:25vemvnvd-clojure - security checker - https://github.com/rm-hull/nvd-clojure/blob/v3.0.0/CHANGELOG.md#changes-from-2130-to-300
• Introduce .edn configuration format
◦ The (yucky) .json config format will remain supported.
• Automatically create .xml and .edn files when they don't exist already
• Update DependencyCheck
• Add a https://github.com/rm-hull/nvd-clojure/blob/v3.0.0/FAQ.md
Enjoy!#2023-02-2023:31Sam RitchieAnnouncing new releases of a big batch of projects under the #C041G9B1AAK
umbrella:
• https://github.com/mentat-collective/jsxgraph.cljs 0.2.0 and the https://github.com/mentat-collective/JSXGraph.cljs/tree/main/resources/jsxgraph/clerk
• https://github.com/mentat-collective/mathbox.cljs 0.2.0 and the https://github.com/mentat-collective/MathBox.cljs/tree/main/resources/mathbox/clerk
• https://github.com/mentat-collective/mathlive.cljs 0.2.0 and the https://github.com/mentat-collective/MathLive.cljs/tree/main/resources/mathlive/clerk
• https://github.com/mentat-collective/mafs.cljs 0.2.1 and the https://github.com/mentat-collective/Mafs.cljs/tree/main/resources/mafs/clerk
• https://github.com/mentat-collective/leva.cljs 0.2.2 and the https://github.com/mentat-collective/Leva.cljs/tree/main/resources/leva/clerk
Each of these projects has gained #C015LCR9MHD support and a #C019ZQSPYG6 template that
generates a batteries-included #C035GRLJEP8 project, set up for interactive development as well as publishing to GitHub Pages and clerk.garden.
Visit the project and template links for more detail on how to get started with each project.#2023-02-2114:21ikitommi[metosin/reitit "0.6.0"] is out!
Reitit is a fast data-driven routing/web library for Clojure/Script. This is a maintenance release before upcoming bigger improvements, adding the following:
• Add support for fragment strings in reitit-frontend
• Add reloading-ring-handler
• Fix redirect-trailing-slash-handler strips query-params
• BREAKING: Drop tests for Clojure 1.9, test with 1.10 & 1.11
• New option :meta-merge on a router for custom merge strategy on route data
• Swagger: support operationId in generated swagger json
• Upgrade jackson for CVE-2022-42003 and CVE-2022-42004
• Improved coercion errors perf
• Add example for Reitit + Pedestal + Malli coercion
• Handle empty seq as empty string in query-string
• Polish pedestal chains when printing context diffs
• Updated dependencies (malli, jsonista, ring-swagger-ui, fipp, ring & co)
Big thanks for all contributors and everyone at #reitit helping others.
https://github.com/metosin/reitit#2023-02-2116:32practicalli-johnhttps://github.com/practicalli/clojure-deps-edn - enhancing Clojure CLI with a wide range of community tools as aliases
• `:format/zprint` alias to check the format using :indent-only style of given file name or file patterns, e.g. **/*.clj **/*.edn
• `:format/zprint!` alias to format using */*.clj **/*.edn
• mulog library for event log and trace added to reloaded aliases, :repl/reloaded, :dev/reloaded & :lib/reloaded
• `:format/cljstyle` checks the format of all project files (or a given file)
• `:format/cljstyle!` automatically formats all the project files (or a given file)
• `:format/cljfmt` checks the format of all project files (or a given file)
• `:format/cljfmt!` automatically formats all the project files (or a given file)
• MegaLinter workflow java flavor version v6.19.0
• Quality Checks GitHub workflow action/checkout updated to version v3.3.0
• Update library versions using clojure -T:search/outdated (see https://github.com/practicalli/clojure-deps-edn/blob/live/CHANGELOG.org for details of version changes)#2023-02-2116:36Noah Bogartis that supposed to be cljfmt? lol m not n, right?#2023-02-2116:38practicalli-johnjust checking someone is reading this... 🙂 thanks for letting me know, ive updated...#2023-02-2116:59Ferdinand BeyerUpdated and getting this:
Error building classpath. Error reading edn. Invalid number: 1.77.1236 (/Users/fbeyer/.config/clojure/deps.edn)
Maybe there’s an error in the file?#2023-02-2117:00Ferdinand BeyerLooks like a missing quotes in line 90 — ah, I see you already fixed it#2023-02-2117:48practicalli-johnYes, I forgot to run cljstyle before doing the commit (my bad). I should add it as a pre-commit hook or something similar as it picked up the issue.#2023-02-2211:20lispyclouds0.0.3 release after a LONG time is out for https://github.com/lispyclouds/navi: A tiny library converting OpenAPI spec to #reitit routes. This is suitable for making https://www.atlassian.com/blog/technology/spec-first-api-development servers. Hopefully its of use to some folks! 😄#2023-02-2215:15ehernackiThis blog post was a nice rabbit hole to fall into! Many things there speak of the challenges I have right now 😄#2023-02-2222:28emccueGot my Java JSON library, heavily inspired by data.json and elm's json package, minimally documented with some examples.
It is usable from Clojure, but tbh you should prefer an existing option. This is mostly targeting ergonomics for the typed side of the world
https://github.com/bowbahdoe/json#2023-02-2302:58emccueExample of clojure usage - does work. Just, again, not what I was designing for
(ns json
(:import (dev.mccue.json Json JsonReadException)
(dev.mccue.json.stream JsonArrayHandler JsonObjectHandler JsonValueHandler)
( StringReader))
(:refer-clojure :exclude [read read-string]))
(declare value-handler)
(defn object-handler
[cb]
(let [object (transient {})]
(reify JsonObjectHandler
(onField [_ field]
(value-handler #(assoc! object field %)))
(onObjectEnd [_]
(cb (persistent! object))))))
(defn array-handler
[cb]
(let [array (transient [])]
(reify JsonArrayHandler
(onObjectStart [_]
(object-handler #(conj! array %)))
(onArrayStart [_]
(array-handler #(conj! array %)))
(onNumber [_ number]
(conj! array
(if (.isIntegral number)
(.bigIntegerValue number)
(.bigDecimalValue number))))
(onString [_ string]
(conj! array string))
(onNull [_]
(conj! array nil))
(onTrue [_]
(conj! array true))
(onFalse [_]
(conj! array false))
(onArrayEnd [_]
(cb (persistent! array))))))
(defn value-handler
[cb]
(reify JsonValueHandler
(onObjectStart [_]
(object-handler cb))
(onArrayStart [_]
(array-handler cb))
(onNumber [_ number]
(cb (if (.isIntegral number)
(.bigIntegerValue number)
(.bigDecimalValue number))))
(onString [_ string]
(cb string))
(onNull [_]
(cb nil))
(onTrue [_]
(cb true))
(onFalse [_]
(cb false))))
(defn read
[reader]
(let [not-read (Object.)
result (volatile! not-read)]
(Json/readStream
reader
(value-handler #(vreset! result %)))
(let [result @result]
(when (= not-read result)
(throw (JsonReadException/unexpectedEOF)))
result)))
(defn read-string
[s]
(read (StringReader. s)))#2023-02-2319:39Lucas JordanI put together a little project to aws-sig4 sign http request. It was created with clj-http in mind, but really focuses on just creating the Authorization header (and other required header parts). https://github.com/patientengagementadvisors/clj-aws-sig4#2023-02-2416:01borkdudehttps://github.com/babashka/nbb: Scripting in Clojure on Node.js using https://github.com/babashka/sci!
1.2.167. It's been a while since the last announcement and a lot has happened. Changes since the last announcement in 🧵 !#2023-02-2416:05borkdude• https://github.com/babashka/nbb/issues/297: resolve nbb.edn relative to invoked script
• https://github.com/babashka/nbb/issues/309: fix error when calling a macro which is referring to a js library symbol
• https://github.com/babashka/nbb/issues/201: keyword arguments as map support
• https://github.com/babashka/nbb/issues/306: nREPL server exits on evaluation error
• https://github.com/babashka/nbb/issues/303 nREPL server sends bad namespace value in eval responses.
• https://github.com/babashka/nbb/issues/302: top level do expressions did not allow non-seq? values
• https://github.com/babashka/nbb/issues/300: write print-error-report to *print-err-fn*
• https://github.com/babashka/nbb/discussions/296: expose pretty printing errors in JS. See https://github.com/babashka/nbb#printing-errors.
• https://github.com/babashka/nbb/issues/294: support multiple values in code input in nREPL eval message
• https://github.com/babashka/nbb/issues/295: add swap-vals! and reset-vals!
• https://github.com/babashka/nbb/issues/292: fix destructuring in multimethod
• Lazy load cljs.pprint for better startup time
• Update SCI: faster field access
• Upgrade SCI with performance improvements
• https://github.com/babashka/nbb/issues/288: escape regex when searching for completions in REPL
• Add support for executing function using https://github.com/babashka/cli:
nbb -x foo.bar/baz --flag --option 1
• Add cljs.pprint/cl-format
• Add promesa.core/future
#2023-02-2421:23borkdudeAlso... nbb + deno!
https://twitter.com/borkdude/status/1629220957914124290#2023-02-2501:45BuzzNot certain this is the correct channel but I wrote a short basic article on why learn https://docs.google.com/document/d/1T1cEsuTX-j--OrVJqvSf3iV1ye_7FjjcXCOBkRU3TAI/edit?usp=sharing. It is more for those who don’t use Clojure and want a very basic understanding of Clojure. Maybe a newbie programmer. Cheers#2023-02-2501:57Epidiah RavacholI suspect that's the wrong link.#2023-02-2502:33zaneArticles should go in #C8NUSGWG6.#2023-02-2508:05vlaaadWrong channel, delete please#2023-02-2510:28borkdude@U50L2RTCG This was a link to an article "Questions before you start a grant". Since it wasn't about Clojure, I deleted it. Next time when you have an article (about Clojure) to share, it can go into #C8NUSGWG6 like @U050CT4HR said.#2023-02-2514:40BuzzThank you. My bad!#2023-02-2514:42BuzzThank you too. #2023-02-2514:50borkdude@U50L2RTCG No problem. I'm still curious about your article in #C8NUSGWG6 :)#2023-02-2514:50borkdudeOh I see it#2023-02-2514:51borkdudewell, now I don't because https://medium.com wants me to upgrade before I can read it ;)#2023-02-2520:10BuzzI deleted it because it had a number of mistakes#2023-02-2521:22bherrmannI made a small (toy) project for exploring a sql database and its relations. It is named "Table Explorer" (although perhaps "Table Schema Explorer" would be a better name.)
https://github.com/bherrmann7/table-explorer
I did a tiny 4 minute tour of how to use it. https://youtu.be/SejOoCdCq3I#2023-02-2707:22jumarThanks, this looks quite useful!
Some initial feedback:
• Documentation is missing regarding supported db drivers (only psql by default) -> add a note that a proper dependency must be added to deps.edn
• Leaving the Initial Table field empty yields Incorrect table name '' -> maybe render all tables in this case?
• Once a table is expanded, I do not know how to collapse it again
◦ also, with All option, all the tables are expanded automatically
• Zooming would be nice#2023-02-2707:31jumarAnd a little question: any special reason to use clojure.java.jdbc instead of next.jdbc?#2023-02-2712:41bherrmannI'm more familiar with clojure.java.jdbc (than next.jdbc.) - so no thoughtful reason.
I updated the docs to mention the postgres jdbc limitation.#2023-02-2712:59bherrmannrequiring an initial table is lame. I will update to allow choosing "all" and/or displaying all the table names and allow the user to choose an initial one (or many?)
collapsing is a good idea, hadn't occurred to me.
All means, to me, "add all tables into the diagram" - I will think about how to make that clearer.
Not sure what you mean by zooming. I do use the browsers zoom in/out to effectively zoom and pan the diagram.
Thanks for your feedback.#2023-02-2622:56borkdudehttps://github.com/borkdude/cljs-showcase: a small/minimal demo project that shows how you can make interactive documentation for a ClojureScript library using #sci
The README.md of the project renders like this: https://borkdude.github.io/cljs-showcase/
And it's automatically updated using Github pages on every push.#2023-02-2710:32Ferdinand BeyerFinally got around to publish https://github.com/ferdinand-beyer/refx to Clojars: v0.0.49 is available now!
refx is a port of re-frame without Reagent, bringing re-frame’s elegance to next-generation React wrappers such as Helix or UIx. Thanks to @rome-user (GitHub handle, not sure if they’re in Slack) for fixing a bug in reg-sub!#2023-02-2712:05Rupert (All Street)Nice work. Great to have the https://github.com/ferdinand-beyer/refx/tree/main/examples too.#2023-02-2714:02rafaeldelboniThanks for your work Ferdinand.
I've ported some reitit/re-frame examples to refx as well, if anyone is interested in more samples.
The port was 1:1 when looking at re-frame vs refx code:
https://github.com/rafaeldelboni/helix-refx-reitit-example#2023-02-2715:46ericdalloclojure-lsp Released https://clojure-lsp.io/ https://github.com/clojure-lsp/clojure-lsp/releases/tag/2023.02.27-13.12.12 with fixes, performance and behavior improvements 🎉
There are improvements in hover being able to follow :arglists for documentation, support for cljs docs search on clojuredocs, big performance improvement in completion and more improvements!
More details in #CPABC1H61
Thank you for all sponsors and ClojuristsTogether clojurists-together💙#2023-02-2721:21mpenethttps://github.com/mpenet/mina 0.1.13 is updated with the latest Nima release (requires java19+Loom preview)#2023-02-2813:50Tomas BrejlaI understand Nima is still relatively new & alpha. But still, I was curious to try apache benchmark against it (or mina). And I was surprised that no matter what value I used for "concurrency" (`-c` ), the benchmark resulted in identical results (total time, requests per second,..)
Also the request per second number wasn't too great: ~ 25k req/s on relatively beefy laptop. I've seen better results on "regular old servers" such as httpkit etc.
Does benchmarking using ab makes even sense against Nima/Mina? Is is some specific configuration needed in order to get better results?#2023-02-2813:55mpenetI recall one benchmark showing 800k req/s on an early nima release, matching the netty impl. of helidon. So I suppose that's likely a config issue and maybe some system level tweaks needed to get there. I haven't run any benchmarks yet myself, but I try to make the code not be wasteful (there are more low hanging fruits, but I don't want to focus on that right now, while in alpha).#2023-02-2813:58mpenethttps://github.com/TechEmpower/FrameworkBenchmarks/pull/7614/files#2023-02-2814:05mpenetif you look at the code involved for reading a req and writing a response it's very thin, I doubt mina is very far from Nima. One thing I will introduce at some point is some "lazy" maps a bit like in aleph to cut down this further, field access would just defer to the underlying method calls and potentially cache values upon access. But not right now.#2023-02-2814:06Tomas Brejlait's definitely a problem in mina, I got same results with some nima example project (maven + java)#2023-02-2814:06mpenetwhat do you mean? same result with Nima and Mina? or very different ones#2023-02-2814:09Tomas Brejlasame results
1. https://github.com/tomas-langer/helidon-nima-example (need one more dependency to be added to pom.xml to work)
2. example hello world server using mina
both gave me ~25k req/s using ab, at both cases it made no difference when I increased concurrency level#2023-02-2814:10mpenetright. well, that could be caused by many things, some config tweaks needed in mina/nima itself or OS level (ulimit & co)#2023-02-2814:11Tomas BrejlaI tried checking ulimits and stuff as well, but nothing fishy there.
I'll check that TexhEmpower link you mentioned above. Thanks.#2023-02-2814:11mpenetI could try to ask the authors to give me some hints on how they achieved 800k for their presentation, they are quite responsive/helpful#2023-02-2814:11mpenet(there's a helidon slack fyi)#2023-02-2814:11Tomas BrejlaI'll also try using different tools than ab - or at least check if my distro has the up-to-date version#2023-02-2814:13mpenetwell ab should be able to go further than 20k r/s, I strongly suspect it's not the issue 🙂#2023-02-2814:28Tomas Brejlait's strange, here's a quick "repro"
(ns httpkitserver.httpkitserver
(:require [org.httpkit.server :as http]
[s-exp.mina :as mina]))
(defn app [_req]
{:status 200
:headers {"Content-Type" "text/html"}
:body "hello HTTP!"})
(comment
;; httpkit start/stop
(def server
(http/run-server app {:port 8080}))
(server)
;; ab -c 8 -k -n 100000
;;Requests per second: 230394.04 [#/sec] (mean)
;; mina start/stop
(def server-mina
(mina/start! app {:port 8080}))
(mina/stop! server-mina)
;; ab -c 8 -k -n 100000
;; Requests per second: 20098.54 [#/sec] (mean)
)#2023-02-2814:30mpenetI would guess it could be the config defaults that are more conservative#2023-02-2814:30mpenetsomething like that#2023-03-0108:11mpenetjust using wrk instead of ab I get 72k r/s, but maybe that would also bump the numbers of httpkit#2023-03-0108:12mpenetI just spent 5min on it.#2023-03-0108:19Tomas Brejla➜ ~ # httpkit
➜ ~ wrk -c 30 -t 10
Running 10s test @
10 threads and 30 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 73.09us 62.46us 4.10ms 95.73%
Req/Sec 43.06k 5.28k 57.13k 65.15%
4326476 requests in 10.10s, 536.39MB read
Requests/sec: 428387.33
Transfer/sec: 53.11MB
➜ ~ # mina
➜ ~ wrk -c 30 -t 10
Running 10s test @
10 threads and 30 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 99.78us 116.17us 8.24ms 96.01%
Req/Sec 32.07k 1.03k 34.64k 74.36%
3223260 requests in 10.10s, 421.13MB read
Requests/sec: 319140.63
Transfer/sec: 41.70MB
#2023-03-0108:22mpenetlike I said yesterday, there are still some low hanging fruits for perfs, and I suppose with some tweaks of the server options that would also push it a bit further#2023-03-0108:23Tomas BrejlaBoth numbers are quite high, but again, suprisingly, mina/nima is not winning at this game. There might be some important setting somewhere in the options that will change this situation.
Or perhaps the virtual threads approach way doesn't necessarily bring better raw performance, but scales to high number of concurrent users in more friendly way (?)#2023-03-0108:24mpenethere's a report from a nima dev using the example repo: Requests/sec: 1018686.05#2023-03-0108:24Tomas Brejlawow 🙂#2023-03-0108:24mpenethe's trying httpkit to compare#2023-03-0108:25Tomas BrejlaI might check some nima docs or slack later. Perhaps they'll mention what settings need to be used / configured.#2023-03-0108:25mpenetI don't think it's surprising, I am actually quite pleased we're not so far off httpkit, given how early it is and with the default options#2023-03-0108:27mpenetthat's what he uses:#2023-03-0108:27mpenetwget -nc
wrk -d 15 -c 512 -t 8 --latency \
-H 'Accept: text/plain,text/html;q=0.9,application/xhtml+xml;q=0.9,application/xml;q=0.8,*/*;q=0.7' \
-H 'Connection: keep-alive' \
\
-s pipeline.lua
-- 16#2023-03-0108:27mpenetsame as techempower bench setup#2023-03-0108:31mpenetthe full output was:
File 'pipeline.lua' already there; not retrieving.
Running 15s test @
8 threads and 512 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 438.78us 663.85us 31.01ms 98.82%
Req/Sec 128.64k 13.27k 197.85k 66.89%
Latency Distribution
50% 377.00us
75% 476.00us
90% 541.00us
99% 1.25ms
15381870 requests in 15.10s, 2.35GB read
Requests/sec: 1018686.05
Transfer/sec: 159.33MB#2023-03-0109:12mpenetI just landed a tiny optimisation for request map creation/access that should work towards closing the gap with httpkit, more of the same can be done on other things (like request headers access)#2023-03-0109:12mpenetmina-0.1.14#2023-03-0109:17Tomas BrejlaNice speed bump 👍
wrk -c 30 -t 10
previous run with mina 0.1.13
3223260 requests in 10.10s, 421.13MB read
Requests/sec: 319140.63
Transfer/sec: 41.70MB
mina 0.1.14
3777539 requests in 10.10s, 493.55MB read
Requests/sec: 374019.28
Transfer/sec: 48.87MB
#2023-03-0109:17mpenetyeah, there are plenty more things like that to be done#2023-03-0109:20mpenetthe nima dev that reported the numbers before got 307896.83 r/s with httpkit#2023-03-0109:25Tomas Brejlabtw using that pipeline.lua bench script you sent, mina is already winning 🙂
(the response is always a simple static hello world response)
httpkit : Requests/sec: 482222.91
mina: Requests/sec: 564992.41
#2023-03-0109:26mpenetcool !#2023-02-2723:16Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.11.1.1237 is now available
• Added env var that can be set to temporarily allow support for http repos: CLOJURE_CLI_ALLOW_HTTP_REPO
• Remove deprecated support for -R and -C
• Clean up help text around repl supporting init-opts#2023-02-2809:08oliyhi @U064X3EF3 thanks for the new release. could you direct me to where i can find more information on CLOJURE_CLI_ALLOW_HTTP_REPO? can't find it in either cli or tools repos, nor on the TDEPS jira. wondering what it is? thanks#2023-02-2812:25Alex Miller (Clojure team)I haven’t doc’ed it yet, but it’s exactly what it says above - an env var that can be set to allow use of Maven repos with http urls (which are disallowed otherwise)#2023-02-2812:29Alex Miller (Clojure team)It’s https://github.com/clojure/tools.deps/blob/e12fe8ea777ca11e36cd9b07fef46a8abba749d7/src/main/clojure/clojure/tools/deps/util/maven.clj#L134 in tools.deps#2023-02-2813:12oliythanks#2023-02-2809:26plexusKaocha 1.79.1270 is out, with (drum roll), Babashka compatibility! Kaocha is a comprehensive test runner, containing everything you would expect from modern test tooling. This is the eight Kaocha release this year, with many thanks to Clojurists Together and Gaiwan for the financial support. https://github.com/lambdaisland/kaocha#2023-02-2809:27plexusCHANGELOG for recent releases (combined)
• Kaocha is now compatible with Babashka. Running under Babashka is most useful
for validating your Clojure code runs correctly on Babashka, but it may also
be faster for some test suites because of reduced start up time.
• Fix issue with --watch and Neovim by bumping Beholder to 1.0.2
• Fix bug causing namepaces to not be loaded if an alias was already created for them using :as-alias
• kaocha.repl/config accepts a :profile key when specifying extra options.
• Configuration errors and circular dependencies are reported as warnings,
rather than causing the entire watcher to crash. (thanks
https://github.com/frenchy64)
• Fix bug added in https://github.com/lambdaisland/kaocha/issues/384:
assertions in the tail position of an each fixture would return the result
of the assertion instead of the testable object with the merged report data.
(thanks https://github.com/NoahTheDuke)
• Dependency version bumps
• kaocha.plugin.capture-output/bypass macro, for temporarily bypassing output
capturing
• Circular dependencies in watch mode no longer kills the process. (thanks
https://github.com/frenchy64)
• Ensure reloading errors are printed in watch mode when the first test suite is disabled.
• Using a try-catch (without rethrowing) in an :each fixture could swallow
thrown exceptions, resulting in a test being treated as passing when it should
have been reported as an error. Fixed by changing how :each fixtures wrap
the test function in execution. (thanks
https://github.com/NoahTheDuke)
• Fix crash on Windows when using --watch with the default Beholder watcher.
• Documentation fixes and improvements
#2023-02-2809:28plexusPlease keep an eye out and report any regressions, the babashka compatibility involved a number of changes. We've tried to tread carefully, but regressions are possible.#2023-02-2813:47Noah BogartGlad to help! Kaocha is a fun codebase#2023-03-0109:17plexusWe did find a regression in the notifier plugin, which has now been fixed. If you get an error with the notifier then please upgrade to v1.80.1274#2023-02-2812:13fogus (Clojure Team)https://github.com/clojure/tools.namespace v1.4.2
• Fixes https://clojure.atlassian.net/browse/TNS-59 - Handle source files without ns declaration#2023-02-2812:57jaretCrossposting from the #datomic cave to announce the release of Datomic Cloud 990-9202! https://clojurians.slack.com/archives/C03RZMDSH/p1677588991568569#2023-02-2816:00dchelimskyCognitect Labs' https://groups.google.com/g/clojure/c/1XWFUT78ZCs/m/e8PrS3B1AQAJ is out
> • ensure that we only read InputStream request bodies once https://github.com/cognitect-labs/aws-api/issues/231h/t @jetmind
> • convey :document types in response payloads https://github.com/cognitect-labs/aws-api/issues/232
#2023-02-2819:31tony.kayThe general Fulcrologic statecharts library now has official integration support for Fulcro.
https://fulcrologic.github.io/statecharts/#_integration_with_fulcro
This allows you to use state charts to drive the logic around groups of components and their I/O while being tightly integrated with the advanced graph and mutation support of Fulcro itself. This extension does not add Fulcro as a dependency of statecharts itself, so of course you can continue using the base statecharts in any CLJC application.
I did remove guardrails protections from the latest release, after discovering that the spec checking it was doing was causing considerable performance problems in dev (but not in production).
https://github.com/fulcrologic/statecharts#2023-02-2822:44borkdudeBabashka https://github.com/babashka/fs: file system utility library for Clojure 📁 babashka clojure-spin
Changes in the last month:
v0.3.17 (2023-02-28)
• https://github.com/babashka/fs/issues/67: add :root and :path-fn options to fs/zip
v0.2.16 (2023-02-08)
• https://github.com/babashka/fs/issues/89: change default in walk-file-tree from throwing to continue-ing, which works better for glob, match. You can still throw by providing your own visit-file-failed function.
v0.2.15
• https://github.com/babashka/fs/issues/85: add helpers to generate common XDG paths (https://github.com/eval)
#2023-02-2823:27borkdudehttps://github.com/babashka/babashka: Native, fast starting Clojure interpreter for scripting babashka clojure-spin
1.2.174 (2023-03-01)
• Use GraalVM 22.3.1 on JDK 19.0.2. This adds virtual thread support. See https://twitter.com/borkdude/status/1572222344684531717.
• Expose more jaxax.crypto classes
• Add more java.time and related classes with the goal of supporting https://github.com/juxt/tick (https://github.com/juxt/tick/issues/86)
• Compatibility with https://github.com/lambdaisland/kaocha test runner
• https://github.com/babashka/babashka/issues/1496: Add set-agent-send-executor! and set-agent-send-off-executor!
• Bump babashka.fs to 0.3.17
• Bump deps.clj to 1.11.1.1237
• Bump babashka.http-client to 0.1.5
• Bump babashka.cli to 0.6.46
Join #babashka for details.#2023-03-0109:20plexuslambdaisland lambdaisland/cljbox2d 0.8.46 is out. cljbox2d is a wrapper around the jBox2D (JVM) or Planck.js (JS) physics engines. This releases fixes a handful of little snags that people might have run into.#2023-03-0109:23plexuscljbox2d is independent of any rendering engine, we bundle examples of how to use it with Quil and Clojure2D.
To see it in action:
clojure -Sdeps '{:deps {com.lambdaisland/cljbox2d {:mvn/version "0.8.46"} quil/quil {:mvn/version "4.0.0-SNAPSHOT"}}}' -M -m lambdaisland.cljbox2d.demo.simple-shapes
clojure -Sdeps '{:deps {com.lambdaisland/cljbox2d {:mvn/version "0.8.46"} clojure2d/clojure2d {:mvn/version "1.4.5-SNAPSHOT"}}}' -M -m lambdaisland.cljbox2d.demo.clojure2d.pyramid#2023-03-0114:06Sam RitchieAwesome!!#2023-03-0116:22cldwalkerhttps://github.com/logseq/nbb-logseq 1.2.168 is out! nbb-logseq is a version of nbb with features enabled for https://logseq.com/. This release includes the ability to https://github.com/logseq/nbb-logseq#clis that reuse logseq's cljs core.#2023-03-0117:29Alex Miller (Clojure team)We've had about 900 responses so far to the State of Clojure 2023 survey https://www.surveymonkey.com/r/clojure2023 - if you haven't submitted yet, please do!#2023-03-0210:27Daniel GersonShouldn't babashka etc be added in the dialect of Clojure q? :-)#2023-03-0213:19Alex Miller (Clojure team)We may add it in the future#2023-03-0213:41borkdudehttps://github.com/babashka/neil: a CLI to add common aliases and features to deps.edn-based projects
See the https://blog.michielborkent.nl/new-clojure-project-quickstart.html blog post for a gentle introduction into neil.
0.1.57 (2023-03-02)
Changes since last announcement in thread! Join #babashka-neil for details#2023-03-0213:42borkdude• https://github.com/babashka/neil/pull/166: Update neil new -h output to include list of provided templates (@U3X7174KS)
• Upgrade git libs using explicit :git/url when available
• https://github.com/babashka/neil/issues/163: Upgrade libraries, including deps-new to 0.5.0, which no longer uses https://github.com/seancorfield's tools.build wrapper in project templates
• Bug fix for kaocha alias and script typos (https://github.com/KingMob)
• https://github.com/babashka/neil/issues/159: fix pmap + requiring-resolve issue
• Clojars search improvements (https://github.com/tobias)
• Fix fetching versions from maven central
• Fix neil dep add
• Provide bbin install instructions installing a development version (https://github.com/teodorlu)
• Fix incorrect "Requires clean working directory" error in neil version
• https://github.com/babashka/neil/issues/148: Always add latest kaocha version
• https://github.com/babashka/neil/issues/148: Print instructions for making a bin/kaocha script
• https://github.com/babashka/neil/issues/146: Prefer stable versions when running neil dep upgrade. Versions with any qualifier (like -rc1, -alpha, etc). are considered unstable.
• Fix neil dep search helptext formatting (https://github.com/teodorlu)
• Move neil dep upgrade helptext into subcommand (https://github.com/teodorlu)
• https://github.com/babashka/neil/issues/150: swap babashka.curl for babashka/http-client
#2023-03-0216:30seriogaFirst non-beta releases of undertow and ring-undertow libraries are available.
• https://github.com/strojure/undertow
• https://github.com/strojure/ring-undertow#2023-03-0217:33borkdudeAnnouncing https://github.com/borkdude/deflet: Make let-expressions REPL-friendly!
> Let them have their inline-def and eat it too#2023-03-0217:36ericdallowith clj-kondo config export supported OOTB 💅#2023-03-0217:37borkdudeprobably not an optimal clj-kondo config but good enough for the first release :)#2023-03-0218:13Noah Bogartthis is very cool#2023-03-0219:19orestisNice but I think I'm missing something... you can't really evaluate the expressions one by one, can you?
(deflet
(def x 10)
(inc x) ;; => 11
(dec x) ;; =? 9
)
#2023-03-0219:19orestisUnless somehow your editor is aware of this?#2023-03-0219:20borkdude(def y (inc x))
#2023-03-0219:20borkdudeyes, you can evaluate these expressions one by one#2023-03-0219:20borkdudein a REPL#2023-03-0219:27orestisIn Calva, I have to do "evaluate from start of the list to cursor, closing brackets". If I just evaluate the single (inc x) obviously it's looking for an x in the global environment.#2023-03-0219:27borkdudeyou first evaluate (def x 10)#2023-03-0219:27borkdudeand then (inc x) and so on#2023-03-0219:28borkdudesimilar to how you would evaluate expressions in a rich comment form. you don't evaluate them all in one go, right? at least, I never do that#2023-03-0219:32borkdude@U7PBP4UVA I hope this helps:#2023-03-0219:38orestisRight, so during REPL development you are polluting the global environment (by creating a var) - but then you can copy the entire snippet into a test case and the def will be converted into a let, right?#2023-03-0219:40borkdudeindeed#2023-03-0219:40borkdudeI found myself translating these def-like "stories" to let a lot when writing / debugging UI tests#2023-03-0219:50orestisThat is a good tactic! Thanks for clarifying, for a bit I was confused. I do the same top-level def in production sometimes and I’m a bit worried I’ll mess something up globally. So I thought this would fix my issue without changing me workflow. #2023-03-0219:53borkdudeIn that case, maybe I would use a careful convention, like:
(def dbg:x 1)
#2023-03-0221:08borkdudeA demo of how you can use this in nbb to write UI tests!#2023-03-0311:16borkdudedeflet is now available on clojars (0.1.0) and the clj-kondo hook has been improved (it expands exactly like the macro, lsp navigation works)#2023-03-0607:05Danilo Oliveiraborkdude train has no brakes lol
keep the good work!#2023-03-0309:49beoliverAnnouncing https://github.com/beoliver/wiretap: A small library for adding custom tracing without having to modify source code.#2023-03-0311:25henryw374tick 0.6.0 released. The new version works with babashka. Thanks https://github.com/dvingo and https://github.com/borkdude !
Also new is a section in the README looking at the tradeoffs of date-time API choice : https://github.com/juxt/tick#should-you-use-tick-for-date-time-work . It's a question that seems to come up on here on slack quite a bit. Opinions welcome!
Should you use Tick for date-time work?
• If you are just working on the JVM and are comfortable with the java.time API then raw interop will work just fine.
• If you are working in a Javascript environment then seriously consider using https://github.com/henryw374/cljc.java-time: Its build size https://widdindustries.com/blog/clojurescript-datetime-lib-comparison.html (unless targeting http://e.ga highly constrained context such as a https://github.com/mfikes/esprit). The main reason is the native Date API is https://maggiepint.com/2017/04/09/fixing-javascript-date-getting-started/
• If you meet any of the following criteria, use https://github.com/henryw374/cljc.java-time:
◦ are creating cross-platform date-time logic
◦ are not proficient in java.time and would like https://widdindustries.com/why-not-interop/
◦ would rather not maintain type hints in your code or deal with interop syntax
• If you meet the criteria to use cljc.java-time but would like a more terse API and the benefits of e.g. https://juxt.github.io/tick/#_substitution or the interval calculus, but will not miss having every date-time recipe one google search away, then tick might be a good choice. Tick uses https://github.com/henryw374/cljc.java-time so you can always drop to that if Tick is missing something you need.
• Similar in aiming for a terse API, but jvm-only is https://github.com/dm3/clojure.java-time.#2023-03-0314:40Anders Eknerthas the tag not been pushed? 🙂 I don’t see it in the repo#2023-03-0314:43henryw374Ah good catch. Pushed now 👍#2023-03-0317:41wevrem@U051B9FU1 I really appreciate what you’ve done with Tick and I like using it and having a common API for both Clojure and ClojureScript. #2023-03-0317:42Anders EknertSeconded!#2023-03-0317:57henryw374Thanks#2023-03-0320:37raspasovtick is great, such a pleasure to have basically identical time-related semantics in Clojure, ClojureScript and now babashka!#2023-03-0322:42Anders EknertClojureCLR next! 😄#2023-03-0422:56dvingomalli also recently got support for java.time based schemas, makes for a really powerful combination with tick :)
https://github.com/metosin/malli#malliexperimentaltime#2023-03-0322:52ChaseHey I wanted to explore the new OpenAI chatGPT API that was announced a couple days ago and I've been meaning to try out bababska so I wrote this quick little bb cli to have an ai conversation through the terminal. I'm on linux so not sure if it will work on Mac or Windows. You can find it here: https://gist.github.com/chase-lambert/c5533d8e8fbb71268a25e83ecf8e3cc6 with the instructions in the comments. It's quite barebones but quick and fun without having to go to the OpenAI website which usually takes a while to load for me.#2023-03-0322:52ChaseIf you prefer a regular ole Clojure repo you can find that here: https://github.com/chase-lambert/chatgpt-cli This uses clj-http and clojure.data.json instead of bb's built in http client and cheshire.json so the code has a few minor alterations.#2023-03-0322:57ChaseThe new API is crazy cheap and it's for their most powerful model. It is $0.002 for a 1000 tokens which equates to about 375,000 words for a $1.#2023-03-0323:20ChaseWhether it has anything of worth to say in that massive amount of words is still up for debate.#2023-03-0323:25jjttjjCool, I keep thinking about about starting a channel here for notable/interesting chatgpt interactions#2023-03-0400:10seancorfieldHoneySQL -- Turn Clojure data structures into SQL -- com.github.seancorfield/honeysql {:mvn/version "2.4.1002"} -- https://github.com/seancorfield/honeysql -- this is the @p-himik release! Almost every issue here was raised by him and several were fixed by pull requests from him -- thank you! gratitude
• Address https://github.com/seancorfield/honeysql/issues/474 by adding dot-selection special syntax.
• Improve docstrings for PostgreSQL operators via PR https://github.com/seancorfield/honeysql/pull/473 https://github.com/holyjak.
• Address https://github.com/seancorfield/honeysql/issues/471 by supporting interspersed SQL keywords in function calls.
• Fix https://github.com/seancorfield/honeysql/issues/467 by allowing single keywords (symbols) as a short hand for a single-element sequence in more constructs via PR https://github.com/seancorfield/honeysql/pull/470 @p-himik.
• Address https://github.com/seancorfield/honeysql/issues/466 by treating [:and] as TRUE and [:or] as FALSE.
• Fix https://github.com/seancorfield/honeysql/issues/465 to allow multiple columns in :order-by special syntax via PR https://github.com/seancorfield/honeysql/pull/468 @p-himik.
• Fix https://github.com/seancorfield/honeysql/issues/464 by adding an optional type argument to :array via PR https://github.com/seancorfield/honeysql/pull/469 @p-himik.
• Address https://github.com/seancorfield/honeysql/issues/463 by explaining :quoted nil via PR https://github.com/seancorfield/honeysql/pull/475 https://github.com/nharsch.
• Address https://github.com/seancorfield/honeysql/issues/462 by adding a note in the documentation for set operations, clarifying precedence issues.
Follow-up in #C66EM8D5H#2023-03-0407:40seriogaThe parser combinator library parsesso has been released.
https://github.com/strojure/parsesso#2023-03-0409:48borkdudeCongrats! I love parser combinators and having a maintained one in the CLJ ecosystem is great.
I'm interested in using this in bb for scripts.
I noticed you're dropping down to .first interop in clj/cljs. Does this really matter much for performance? I notice micro-benchmarks in the repo, but I'd be interested in macro-benchmarks, as in, parse a 1mb file 1000 times and then see if it matters. At least in bb it won't work today, but with a small tweak it will:#2023-03-0409:49borkdudeAre you open to a small PR for this?#2023-03-0410:15borkdudehttps://github.com/strojure/parsesso/pull/2
(also added a CI config to run lein test + bb test:bb)#2023-03-0412:29serioga> Does this really matter much for performance?
Well, checking for if (x instanceof ISeq) on every token has some effect...#2023-03-0412:30borkdudeinstanceof is the cheapest operation there is#2023-03-0412:30seriogaDon't we have some reader conditional for everything what is not :clj/:cljs ?#2023-03-0412:30borkdudebut of course it could matter in microbenchmarks#2023-03-0412:30borkdudeyes, check the PR :)#2023-03-0412:31serioga> instanceof is the cheapest operation there is
and totally useless in the context...#2023-03-0412:32serioga> yes, check the PR
you used :bb, I've meant “everything else”#2023-03-0412:32borkdudetrue, but in bb's case, :bb has to go before :clj, else it will pick the :clj branch, which most of the time is what you want#2023-03-0412:34seriogaWill not :default work for bb?#2023-03-0412:34borkdudeno, because it picks the :clj branch as soon as it encounters it#2023-03-0412:35borkdudethat's how reader conditionals work: the language picks the first one that is applicable#2023-03-0412:39borkdudeyou're right that in a JVM it can matter significantly:
user=> (time (dotimes [i 100000000] (.seq [123])))
"Elapsed time: 9.2935 msecs"
nil
user=> (time (dotimes [i 100000000] (seq [123])))
"Elapsed time: 489.359167 msecs"
especially in a hot loop of course which parsers are prone to#2023-03-0412:44borkdudebut it seems the instance check itself isn't the performance problem:
user=> (time (dotimes [i 100000000] (instance? clojure.lang.ASeq [123])))
"Elapsed time: 6.648 msecs"
#2023-03-0412:45borkdudeanyway, I understand your trade-offs better now#2023-03-0413:01serioga> Does this really matter much for performance?
https://github.com/strojure/parsesso/blob/default/test/perf/bench.clj#L127
this benchmark becomes 2x slower with first/next.#2023-03-0413:06seriogaISeq and ASeq differ significantly 🙂
(instance? clojure.lang.ASeq [123])
;; Execution time mean : 4.182330 ns
(instance? clojure.lang.ISeq [123])
;; Execution time mean : 36.959700 ns
#2023-03-0413:07borkdudeI see#2023-03-0413:08serioga> instanceof is the cheapest operation there is
it depends on tested type
more classes inherited, more expensive test (when missed)#2023-03-0413:08borkdudeI haven't looked at the implementation but how important is it that the input is a seq? it could e.g. also be a vector so you don't have to go through the seq abstraction at all? Just thinking out loud.
You're right about the inheritance chain, yeah#2023-03-0413:10seriogaAnyway a difference is not tiny so let's keep it.#2023-03-0413:12serioga> (also added a CI config to run lein test + bb test:bb)
this made your PR not so small 🙂#2023-03-0413:12borkdudewould you rather not have tests run on CI and let regressions creep in? ;)#2023-03-0413:13seriogaI mean it would be better to have separate commits...#2023-03-0413:13borkdudeok, sure. would you like to have the CI config at all, or should I just remove it?#2023-03-0413:14seriogaI hope you would not mind it I take your changes manually...#2023-03-0413:14borkdudenot at all#2023-03-0413:15borkdudefeel free to take whatever you want and leave out whatever you want, it's your project :)#2023-03-0413:15seriogathe downside is that you will not be listed in collaborators 🙂#2023-03-0413:16borkdudeyou can do something about that. Add a blank line followed by:
Co-authored-by: Michiel Borkent <
in the commit message#2023-03-0413:22serioga@U04V15CAJ Does not this part require changes?
https://github.com/strojure/parsesso/blob/default/src/strojure/parsesso/impl/char.cljc#L14-L17#2023-03-0413:32borkdudeI think the :cljs thing will work in bb as well#2023-03-0413:32borkdudeand is also faster, since interop is quite slow in bb#2023-03-0413:33seriogashould I add :cljs thing for :bb?#2023-03-0413:33borkdudeI think that would be better yes#2023-03-0413:34seriogafor me the rule looks like “use :bb before any :clj with cross-platform implementation”#2023-03-0413:36borkdudeyes#2023-03-0413:37borkdudeand you can leave :bb out if :clj works already well for bb#2023-03-0413:39borkdudefor comparison:
(require '[clojure.string :as string])
(def c1 \f)
(def c2 \g)
(time (dotimes [i 1000000]
(.equals ^Object (Character/toLowerCase ^char c1)
(Character/toLowerCase ^char c2))))
(time (dotimes [i 1000000]
(= (string/lower-case c1)
(string/lower-case c2))))
$ bb /tmp/perf.clj
"Elapsed time: 2007.004583 msecs"
"Elapsed time: 112.205875 msecs"
$ clj -M /tmp/perf.clj
"Elapsed time: 19.156291 msecs"
"Elapsed time: 49.091 msecs"
#2023-03-0413:39borkdudeso not using interop is much cheaper in bb :)#2023-03-0413:42serioganbb uses same conditionals as bb?#2023-03-0413:42seriogawhat is best for bb here?
(defn- c
"Cross-platform char."
[s]
#?(:cljs s, :clj (first s)))
#2023-03-0413:42borkdudenbb uses :org.babashka/nbb and it has the same rule with respect to the :cljs branch#2023-03-0413:43borkdudebb has JVM semantics but I noticed that str/lower-case also works on chars#2023-03-0413:44borkdudeuser=> (clojure.string/lower-case \C)
"c"
#2023-03-0414:00seriogahttps://github.com/strojure/parsesso/commit/4f7d87c332a521ee7a5b89af1800550ee84a711a#2023-03-0414:01borkdudenice :)#2023-03-0414:02seriogait would be cool if you check before release#2023-03-0414:02borkdudeok, I'll check locally
I think adding a test runner for bb would be good as a follow up? this is better than checking manually imo#2023-03-0414:03borkdude$ bb test:bb
Running tests in #{"test"}
Testing strojure.parsesso.char-test
Testing strojure.parsesso.expr-test
Testing strojure.parsesso.parser-test
Ran 52 tests containing 320 assertions.
0 failures, 0 errors.
This is what I had in my PR#2023-03-0414:04serioga> adding a test runner for bb would be good as a follow up?
ah, what is it for 🙂#2023-03-0414:06borkdudeI think I didn't understand your last reply. Are you asking what a test runner is for?#2023-03-0414:08borkdudeAdding that would enable you to run the tests in test with babashka, as a verification that nothing is broken#2023-03-0414:08borkdudeAnd the .github/workflows that was also part of my previous PR then runs both lein test and bb test:bb in CI on every commit, so you automatically know that everything still works, without having to run things locally#2023-03-0414:10seriogawhat is this file for?
https://github.com/strojure/parsesso/blob/3d00c45679aea43154f853f3c5bd7a8223f71db9/deps.edn#2023-03-0414:10borkdudeIt allows you to use your library as a deps.edn dependency (local or via git). This is both useful for clojure users as babashka users, as they both use the deps.edn dependency manager, which is the official clojure tooling#2023-03-0414:12borkdudeIn the bb.edn test runner file I am using your dependency as a local deps.edn dependency#2023-03-0414:12borkdudeso I'm able to run tests on it#2023-03-0414:13seriogaso do I understand correct?
1. Build and run tests
• ci.yml + bb.edn
2. Use library as deps.edn
• deps.edn#2023-03-0414:13borkdudeyes, but 1 needs 2 in this case#2023-03-0414:13seriogaor all 3 files required?#2023-03-0414:14borkdudeyes. also 2 allows you to use your library as a git dependency so people can test it even before you release it to clojars#2023-03-0414:15seriogahow do you maintain this dependency changes?
:extra-deps {com.cognitect/test-runner
{:git/url ""
:sha "a522ab2851a2aa5bf9c22a942b45287a3a019310"}#2023-03-0414:18borkdudethe above means that I'm using https://github.com/cognitect-labs/test-runner as a library at a specific commit.
https://github.com/cognitect-labs/test-runner/commit/a522ab2851a2aa5bf9c22a942b45287a3a019310
Does this answer your question? If not, please clarify#2023-03-0414:19seriogaIt does not
How do you monitor if version of test-runner should be changed#2023-03-0414:20borkdudeYou have tools for this. How do you do this for project.clj? I will give you a link to a similar tool for deps.edn#2023-03-0414:20borkdudeIn general, I don't expect this library to be necessary to update. It's very stable#2023-03-0414:21borkdudeThis tool is a popular one for deps.edn:
https://github.com/liquidz/antq#2023-03-0414:21borkdudeAlso #C03KCV7TM6F can do it#2023-03-0414:27borkdudeIn a similar way people can use your library with:
{:deps {com.github.strojure/parsesso {:git/sha "..."}}}
It's pretty cool :)#2023-03-0414:27borkdudeWhen you use com.github. or io.github. you don't have to specify the :git/url, then it can be inferred from the library name#2023-03-0414:28borkdudeYou can also specify a :git/tag in which case you can use a short :git/sha (7 characters)#2023-03-0414:30borkdude:sha and :git/sha are synonyms#2023-03-0414:31serioganow bb tests failed on github...#2023-03-0414:31borkdudeok, I'll take a look :)#2023-03-0414:32borkdudehmm, locally it works:
$ bb test:bb
Running tests in #{"test"}
Testing strojure.parsesso.char-test
Testing strojure.parsesso.expr-test
Testing strojure.parsesso.parser-test
Ran 52 tests containing 320 assertions.
0 failures, 0 errors.#2023-03-0414:34borkdudeI will make a PR just to debug this#2023-03-0414:34borkdudedon't merge it#2023-03-0414:38seriogaI see the error#2023-03-0414:38borkdudeah do you? ok#2023-03-0414:38borkdudeah I see yes#2023-03-0414:39borkdudeclj-kondo should add better support for linting multiple languages, currently it only does :clj and :cljs#2023-03-0414:43borkdudeI got another error: Character can't be cast to CharSequence#2023-03-0414:44borkdudeI think in (re-find #".." character) probably#2023-03-0414:44borkdudesomething like this#2023-03-0415:04seriogagreen now 🥳#2023-03-0415:08borkdudeThank you!#2023-03-0415:08borkdudebabashka#2023-03-0415:08seriogaThank you too!#2023-03-0415:38seriogaMentioned @U04V15CAJ in README 🙂#2023-03-0423:58Jakub Holý (HolyJak)@U0HJNJWJH I’d appreciate a paragraph in the readme explaining what parser combinators are & are good for 😅 🙏#2023-03-0510:38serioga@U0522TWDA Should I compile some text from this? https://en.wikipedia.org/wiki/Parser_combinator#2023-03-0510:40serioga@U04V15CAJ Maybe you have somewhere a configuration for cljs tests on node as well?#2023-03-0511:12borkdude@U0HJNJWJH absolutely, I recommend: https://github.com/Olical/cljs-test-runner#2023-03-0511:14borkdudehere is my config for babashka cli:
https://github.com/babashka/cli/blob/26aad2fc56c82a89822e94f021c15235b29147a3/deps.edn#L26
here is how to call it from the command line:
https://github.com/babashka/cli/blob/26aad2fc56c82a89822e94f021c15235b29147a3/bb.edn#L21#2023-03-0511:19Jakub Holý (HolyJak)An eluded (we all know parser parse strings) simplified, more pragmatic explanation? Perhaps worth an example, and most importantly a list of cases you use it for? How does it differ eg from instaparse, which also parses text into data?#2023-03-0511:29borkdude@U0522TWDA A parser combinator library is a library with functions that can be composed into a parser#2023-03-0511:29borkdudeinstaparse takes a grammar specifiction, but in a parser combinator library you build the specification from functions, rather than a DSL#2023-03-0511:48serioga@U0522TWDA kern has the best docs I saw in various Clojure implementations https://github.com/blancas/kern/wiki#2023-03-0511:54Jakub Holý (HolyJak)Borkdudes 2 comments is exactly what I needed#2023-03-0609:12seriogaOK, added the answer in FAQ#2023-03-0610:07serioga@U04V15CAJ Can you tell if this implemented correct and works? https://github.com/strojure/parsesso/blob/default/resources/clj-kondo.exports/com.github.strojure/parsesso/config.edn#2023-03-0610:22borkdudelooks great!#2023-03-0610:24borkdudeyou can unduplicate this config by replacing this line:
https://github.com/strojure/parsesso/blob/bd18de34e04aba22faec6dd0709c7f90c64e8c4f/.clj-kondo/config.edn#L9
with
:config-paths ["../resources/clj-kondo.exports/com.github.strojure/parsesso"]
on the top level#2023-03-0611:11serioga> looks great!
only looks or also works?
I could not test in Cursive.
The confusing part in documentation is if in path should be ns strojure.parsesso.parser or piece of project name com.github.strojure#2023-03-0612:08borkdudeproject name#2023-03-0612:09borkdudein cursive you can test via #C02UN1B0998#2023-03-0612:12borkdudebut you can also test it from the command line#2023-03-0612:13borkdudeIn a project with your dependency
mkdir .clj-kondo
clj --lint $(clojure -Spath) --dependencies --copy-configs
clj-kondo --lint src
You can test your commit with:
{:deps {com.github.strojure/parsesso {:git/sha "..."}}#2023-03-0612:15serioganot sure if clj-extras uses --dependencies --copy-configs flags...#2023-03-0612:17seriogaah, additional command before use
not very convinient 🙂#2023-03-0612:18borkdudeclojure-lsp does this automatically#2023-03-0612:18borkdudeIt seems clj-extras also supports it: https://github.com/search?q=repo%3Abrcosta%2Fclj-extras-plugin%20--copy-configs&type=code#2023-03-0623:17Jakub Holý (HolyJak)@U0HJNJWJH When should I pick parser combinators over EBNF? Do they offer the same and it is only question of which one I prefer to learn or is there some distinct advantage over a DSL such as EBNF? Perhaps it is easier to describe more complex grammars b/c I can make my own helper functions, or something?#2023-03-0705:13seriogaLooks like here is good explanation https://softwareengineering.stackexchange.com/questions/338665/when-to-use-a-parser-combinator-when-to-use-a-parser-generator. I learned parser combinator for parsing mustache which grammar is context dependent.#2023-03-0705:34seriogaAnd another good article https://medium.com/@chetcorcos/introduction-to-parsers-644d1b5d7f3d#2023-03-0706:50Jakub Holý (HolyJak)I gathered this as the answer:
> in general, parser combinators such as parsesso are for creating top-down (i.e. LL) parsers, with the ability to reuse common code (this lib). Parser Generators typically generate a finite state automaton for a bottom-up (LR) parser. Though nowadays there are also combinators for LR grammars and generators for LL ones (e.g. ANTLR). “Which one you should use, depends on how hard your grammar is, and how fast the parser needs to be.” Especially if the grammar has lot of non-trivial ambiguities then it might be easier with the more flexible combinators approach.#2023-03-0408:55seriogaring-control — More controllable composition of Ring middlewares.
https://github.com/strojure/ring-control#2023-03-0421:39borkdudehttps://github.com/babashka/json: a JSON abstraction library
It lets you choose your preferred JSON implementation (currently data.json and cheshire, more to come) by providing them on the classpath, while not coupling your libraries or scripts to them.#2023-03-0516:57ikitommi[metosin/malli "0.10.2"] is out! Malli is a high-performance data-driven data specification library for Clojure/Script. This version adds the following:
• Implement malli.experimental.time schemas for CLJS using (optional) js-joda https://github.com/metosin/malli/pull/853
• Allow instrumenting external functions https://github.com/metosin/malli/pull/841
• Add clj-kondo support for CLJS function schemas https://github.com/metosin/malli/pull/833
• Turn on instrumentation for mx/defn with :malli/always meta https://github.com/metosin/malli/pull/825
• Support type-properties in m/-map-schema, m/-map-of-schema and m/-tuple-schema https://github.com/metosin/malli/pull/856
• FIX: properly compose interceptors in :map-of json-transformer https://github.com/metosin/malli/pull/849
• FIX: error paths for :multi schemas when value is not a map https://github.com/metosin/malli/pull/845
• FIX: Malli generates :nilable/any which is not a valid type in clj-kondo https://github.com/metosin/malli/issues/821
• FIX: mi/collect! without args doesn’t work properly https://github.com/metosin/malli/issues/834
Changelog: https://github.com/metosin/malli/blob/master/CHANGELOG.md#0102-2023-03-05
Code: https://github.com/metosin/malli
Big thanks to all contributors, especially to @danvingo & @joel.kaasinen
Discussion on #CLDK6MFMK#2023-03-0616:14seriogaNew library ring-lib — Opinionated implementations for Clojure ring handler.
https://github.com/strojure/ring-lib#2023-03-0617:01mpenetNice work. I like your libs 🙂 eye'ing zmap with a lot of potential uses#2023-03-0617:11seriogaThank you. That was a reason for zmap :-)#2023-03-0617:26phillzmap is interesting. I did not see a LICENSE file at https://github.com/strojure/zmap.#2023-03-0618:34seriogaI've added LICENSE to zmap.#2023-03-0705:14BurinRewrite of my original code/Vim printer (Ruby library) using Clojure + GraalVM.
https://github.com/burinc/viip#2023-03-0923:26zaneThis looks cool! Seems like there’s a small typo in the README:
> Print ~the~ any source code using Vim.#2023-03-0710:59borkdudehttps://github.com/babashka/sci: Configurable Clojure/Script interpreter suitable for scripting and Clojure DSLs
SCI is used in https://github.com/babashka/babashka, https://github.com/babashka/nbb, https://github.com/nextjournal/clerk, https://github.com/BetterThanTomorrow/joyride/ and many https://github.com/babashka/sci#projects-using-sci projects.
0.7.39 (2023-03-07)
• https://github.com/babashka/sci/issues/874: Keyword arguments as map support for CLJS
• Mutable deftype fields can be marked as such with ^:volatile-mutable in CLJS
• Fix .toString implementation on deftype
• Resolve JS library alias via imported 'class'
• Fix babashka issue 1501: equals on deftype
• Honor :ns-aliases for built-in libs
• Fix issue with copy-ns + protocol
• Support :sci/macro for copy-ns and copy-var for copying macro functions
• Fix #876: SCI analysis too eager when looking up class
• Optimizations with respect to looking up static fields
#2023-03-0714:56mkvlr👁️ Clerk – Moldable Live Programming for Clojure io.github.nextjournal/clerk {:mvn/version "0.13.842"} has been released . ✨
Notable improvements in this release:
• :ladybug: Bugfixes, lot of them: over 60 closed issues
• 👁️ Add clerk/resolve-aliases and make alias resolution explicit (https://github.com/nextjournal/clerk/issues/410)
◦ This makes the alias resolution explicit via a new clerk/resolve-aliases function. The recommendation is now to use the full namespace in :render-fns or make the conversion explicit using clerk/resolve-aliases. This is a breaking change. After upgrading, the error message should guide you want what you need to change (e.g. v/html to nextjournal.clerk.viewer/html).
• 🔨 Make build-graph recur until all transitive deps are analyzed fixing cases where Clerk would not properly invalidate the cache
• 🔌 Offline suport: enabling working offline given the browser was able to previously cache the assets
• ✍️ Support Sidenotes
• 🌄 image and caption helpers
• 🔪 Hide Clerk-specific metadata from code blocks
• 💫 Add dynamic js/import for JavaScript Modules
And much more, get all details in the:wood: https://github.com/nextjournal/clerk/blob/7567ebd7bcb297952cc962d7e3b805e800ee8304/CHANGELOG.md#013842-2023-03-07, find the release on 📦 https://clojars.org/io.github.nextjournal/clerk, read the 📖 https://book.clerk.vision, follow-up in #clerk.#2023-03-0715:12borkdudeLive from the airport!#2023-03-0719:11Alex Miller (Clojure team)https://github.com/clojure/tools.deps 0.17.1297 - Deps as data and classpath generation
• Added new api function resolve-added-libs
• Added new data to basis - :basis-config and :argmap (which replaces prior :resolve-args and :classpath-args . Those keys are still there (for now) but will eventually be removed#2023-03-0719:14Noah Bogarthow long does it generally take until the api docs are updated? is that manual? i don't mean to rush if it is#2023-03-0719:19Alex Miller (Clojure team)I can re-gen, it's not automatic#2023-03-0719:28Alex Miller (Clojure team)updated#2023-03-0719:28Noah Bogarthashtag blessed#2023-03-0719:28Noah Bogartthank you#2023-03-0719:52seancorfieldI'm looking at the API docs for resolve-added-libs and it's not clear to me what the existing argument is meant to be -- is it a subset of a basis?#2023-03-0719:53seancorfieldIs it something like (t/resolve-added-libs {:existing (:libs my-basis) :procurer (:procurer my-basis) :add '{my.cool/lib {:mvn/version "1.2.3"}}) ?#2023-03-0720:02Alex Miller (Clojure team)the procurer config is currently at the root (:mvn/repos and :mvn/local-repo) so more like (t/resolve-added-libs {:existing (:libs my-basis) :procurer my-basis :add '{my.cool/lib {:mvn/version "1.2.3"}})#2023-03-0720:04Alex Miller (Clojure team)(possibly in the future procurer stuff will be under its own key in the basis)#2023-03-0720:20seancorfieldThanks for the clarification. And this just resolves/downloads things -- it doesn't add it to the classpath, right? That's another piece of the puzzle coming in Clojure 1.12...?#2023-03-0720:28Alex Miller (Clojure team)yes, it's a lemma#2023-03-0720:29Alex Miller (Clojure team)(which as my math teacher used to say will get us out of dilemma later ...)#2023-03-0719:12Alex Miller (Clojure team)Clojure CLI 1.11.1.1252 is now available
• Update to latest tools.deps#2023-03-0719:13Alex Miller (Clojure team)https://github.com/clojure/tools.build 0.9.4 - Clojure builds as Clojure programs
• uber - exclude Emacs backup files from uberjar inclusion (useful with local/git deps)
• uber - improve error message when file in local or git lib can't be read
• write-pom - improve docstring
• Switch to tools.deps 0.17.1297#2023-03-0816:13practicalli-johnhttps://github.com/practicalli/spacemacs-config provides a user configuration for Clojure development with Spacemacs (Emacs community config) and is used in the https://practical.li/spacemacs/
Major refactor of configuration
The user configuration has evolved over the last 7+ years of using Spacemacs for Clojure development, especially with the introduction of Clojure LSP. Care has been taken to ensure Clojure and other layers are optimally configured for use with LSP whist still providing a minimally invasive UI.
The design of the config has been split to make it simpler to manage your own custom configuration on top of the configuration provided by Practicalli.
Most notable changes include
• renamed GitHub repository to https://github.com/practicalli/spacemacs-config and renamed default branch to main
• Refactor dotspacemacs/user-config into individual files (matching the approach taken by Practicalli Doom Emacs Config and Practicalli Neovim Config)
• Update clojure and autocomplete layer variables for optimal use with LSP and remove clash between clojure-mode comment form and LSP
• Update LSP variables to include peek menus for references, symbols, etc (consistent with a visually minimal use of lsp)
• git layer configured with git-delta plugin for enhanced diff highlights
• spacemacs-modeline - hide evil state icon (use cursor colour & shape for effective state tracking)
• Move unused configuration to deprecated-config.el for historical reference
See https://github.com/practicalli/spacemacs-config/pull/7 for full details.#2023-03-0816:32elkenHi John, this spacemacs stuff looks great 🙂 Would be good to know if you have any suggestions on what the doom clojure module is missing in comparison#2023-03-0816:59practicalli-johnThere are lot of conveniences that I have become used to with Spacemacs that I did miss when using Doom Emacs for the last 3 months.
The most noticeable change switching from Spacemacs to Doom Emacs are the keybindings. Spacemacs has a detailed keybinding guide so keys are the same across multiple languages, so these have become very ingrained. Changing key bindings in Doom Emacs (and many other configs) was relatively simple and I created numerous changes to make things easier for myself - https://github.com/practicalli/doom-emacs-config/blob/main/%2Bbindings.el
I also changed many key bindings and configuration for the Clojure module, mostly adding the key bindings I originally designed for Spacemacs many years ago - https://github.com/practicalli/doom-emacs-config/blob/main/%2Bclojure.el
I've tried to document some of the differences if migrating from Spacemacs to Doom, although this is far from complete - https://practical.li/doom-emacs/introduction/spacemacs-to-doom/ (something I can add to at a later date though)
Whether people miss these conveniences as much as I do depends on if they were actually used (I am sure there is still quite a lot of Spacemacs I dont use). Some of these things can also be achieved (albeit with different key bindings) using Vim-style editing commands, so may be of less valuable to the doom emacs community which seems to predominatly be people with a stronger vim/neovim background (like the original author)#2023-03-0817:01elkenThat's interesting, I'll make a note to read through those 🙂 I think yeah changing keybinds is kinda subjective, I made an effort to make the current set of binds more obvious in a recent PR; I think adding more could work if it's not too cluttered#2023-03-0817:07practicalli-johnYes, Its way too late to change any of the existing key bindings, although adding key bindings can be very useful especially if they are given useful labels and organised in meaningful sub-menus.
Feel free to use what ever you think is of use to the community, its all under creative commons zero license so can be added to Doom Emacs#2023-03-0823:12lreadEtaoin v1.0.40 - A pure Clojure Webdriver protocol implementation
Just https://github.com/clj-commons/etaoin/blob/master/CHANGELOG.adoc#v1040 (thanks @borkdude)
Drop by #C7KDM0EKW with any questions!
Etaoin is one of the many projects under the loving care of https://github.com/clj-commons.#2023-03-0914:20simongray> https://github.com/kuhumcst/xml-hiccup
> Convert XML into Hiccup in Clojure and ClojureScript.
I have used this code for a while to convert XML into Hiccup on both the backend and frontend. Today, I decided to put it into a separate library.#2023-03-0914:30simongray> https://github.com/kuhumcst/pedestal-sp
> Turn a Pedestal web service into a SAML Service Provider.
And for all of you SAML-lovers out there… (do you even exist?)
I have used this code for several years in production, but this is its first real release as a library. It was basically the first piece of code I developed for a production system all the way back in 2020. In fact, very little has changed in the meantime other than a few dependency bumps since I spent a long time getting it right.
The library can be used as either a set of routes that you add to a Pedestal web service to make it possible to login via SAML or its constituent parts can be used independently in your own implementation. I have wanted fine-grained control of authorization before and saw fit to implement it as part of this library.
There are some clever bits in it... for example, you can use SAML authorization in both frontend and backend, both inlined in your code and at the route level, and it’s all integrated! For example, you can have authorization code at a route in your backend and your frontend will magically know whether the currently authenticated user can access that particular backend endpoint, allowing you to tailor the frontend code to different authorization levels in a totally decoupled way.#2023-03-0916:57otfromthat is a good enterprise client friendly bit of code.#2023-03-1008:42robert-stuttafordcc @U04V5VAUN 🙂#2023-03-1000:15phronmophobicInitial release of https://github.com/phronmophobic/clj-graphviz
Most (all?) graphviz libraries build on top of the dot command line tool. Instead, clj-graphviz wraps the underlying c libraries directly. The low-level c wrapper is complete, but the higher level clojure API is currently minimal.#2023-03-1000:36HuahaiIt would be nicer to bundle the native lib in the jar, as most JVM libraries using C libraries do#2023-03-1000:38phronmophobic@U0A74MRCJ, I mostly agree. Do you know any good tools for building and deploying jars with native libs?#2023-03-1000:40HuahaiIt’s a matter of putting them in the resource directory of the jar.#2023-03-1000:40HuahaiNo extra tools necessary, as far as I can tell.#2023-03-1000:40phronmophobicRight, but you also have to build the library for multiple architectures and platforms, right?#2023-03-1000:41HuahaiRight, that’s unavoidable. We all have to do that.#2023-03-1000:41phronmophobicIs there an easy way to do that? My experience is that it's a pain.#2023-03-1000:41HuahaiI use a bunch of empty lein projects to do it, you may use clj build, or maven, or whatever#2023-03-1000:42HuahaiDepends on what build tool you are using already#2023-03-1000:42phronmophobicDo you cross compile? or use some cloud CI service for the various platforms?#2023-03-1000:42HuahaiI use cloud CI#2023-03-1000:44HuahaiThat’s the price to pay for using native library. It’s not a big deal. Once it’s setup, it’s not a problem.#2023-03-1000:45HuahaiYou can’t expect your JVM users to do these themselves though, unless you don’t want people to use it.#2023-03-1000:45phronmophobicThat's what package managers are for.#2023-03-1000:45phronmophobicI do agree that jar dependencies are easier though.#2023-03-1000:46HuahaiI don’t think package managers can do this for you, as native libraries are different, and platforms are numerous#2023-03-1000:46HuahaiBesides, you want to have control of the stack because your users will come to you#2023-03-1000:46phronmophobicI tested clj-graphviz on mac and linux using the libs built by the system package managers.#2023-03-1000:47HuahaiYou can’t expect users to install this and that, because your users are JVM users, they use Java to avoid the native dependency hell.#2023-03-1000:48HuahaiIf possible, build your native libs statically even.#2023-03-1000:49phronmophobicCan you load static libraries from the JVM?#2023-03-1000:49phronmophobicI thought they had to be shared/dynamic libraries.#2023-03-1000:50HuahaiI think so#2023-03-1000:51Huahaihttps://docs.oracle.com/javase/8/docs/api/java/lang/System.html#loadLibrary-java.lang.String#2023-03-1000:51HuahaiThis only works for GraalVM though#2023-03-1000:51HuahaiFor regular JVM, I don’t think so, as you are not going to build the VM.#2023-03-1000:53HuahaiOn GraalVM, static link only works for amd64 linux at the moment#2023-03-1000:53HuahaiBut that’s what we are doing.#2023-03-1000:54HuahaiIt’s a lot of work, for musl tool chain has to be used for static linking.#2023-03-1000:56HuahaiAnyways, as a library maintainer, that’s the work you have to do, because the users will come to you. You are responsible for the whole stack, from bottom to top. LOL#2023-03-1000:56phronmophobichmmm, I wonder if there's a way to automatically package native dependencies by just running the package manager script and putting that in a jar?#2023-03-1001:02HuahaiWhat package manager you are referring to? Apt? yum? They are providing for the OS. Putting the deps in the jar is the opposite of that: you are not using OS desp, you are providing deps of your own.#2023-03-1001:03HuahaiThe reason to use JVM is because it is standalone, not OS dependent. That’s the whole Java story. Your users expect that story to stick, even your library depends on native things. That’s why we bundle .so, .dll, etc. in the jar.#2023-03-1001:04HuahaiTrying to use OS lib is more hustle than just compile your own and put them in the jar.#2023-03-1001:05HuahaiIt’s much less work, trust me.#2023-03-1001:06phronmophobicI do this work for my other library membrane, and it's a pain.#2023-03-1001:08phronmophobicIf there's an easier way, I'm definitely open to it. I also have wrappers for other c libraries like ffmpeg, chromium embedded framework, and libclang. It would be great to have an easy way to provide native deps for all these.#2023-03-1001:09HuahaiYou are welcome to come up with something. Would love to see it.#2023-03-1001:10phronmophobicDo you have any open source examples that show how easy it is?#2023-03-1001:11HuahaiThis is what I do for datalevin: https://github.com/juji-io/dtlvnative#2023-03-1001:12Huahaijust copy paste a bunch of files around#2023-03-1001:12phronmophobicThanks, I'll check it out.#2023-03-1015:33borkdudeMaybe it's an idea to decouple the native lib from the clojure code, as the underlying stuff (like compiled Java) often doesn't change as much and then you won't have to upload/download these binaries for every minor clojure change#2023-03-1017:50phronmophobicYea, it’s pretty common to put the native lib in its own jar. It’s also common to use a different jar for each target platform and architecture so you can download only the deps that are actually required.#2023-03-1318:32Ivar RefsdalNeat work @U7RJTCH6J
ps maybe old news for you, but have you tried https://openjdk.org/jeps/434?
(I've used it with some success myself...)#2023-03-1318:40phronmophobicNot directly, but I have used https://github.com/IGJoshua/coffi which wraps it.#2023-03-1318:47phronmophobicThe c wrapper firsts generates a data representation of the c API by parsing the headers and then generates JNA code that does all the ffi. I would also like to have a code generator that uses panama. I really like the #coffi API, but there's some missing pieces for using structs by reference without fully serializing all the data (which I usually rely on).#2023-03-1113:41Wernerhttps://github.com/wkok/openai-clojure v0.4.0 released
• Add support for Chat API
• Add support for Audio API#2023-03-1114:42practicalli-johnhttps://practical.li/#books have all been migrated to https://squidfunk.github.io/mkdocs-material/ and are looking like professional websites now (if I do say so myself) 🙂
Each book provides https://practical.li/clojure/introduction/writing-tips/ to make the most out of the Material for MkDocs features.
Each page of the book includes a pencil icon in the top right to allow for editing and pull requests via the books GitHub repository. Merged PRs are automatically built into a new published version of the book.
Each page also included the date it was last updated, to help gauge how current the information may be.
The readme.md in the repository of each book covers the dev and CI workflow (its pretty simple really)
https://practical.li/clojure/ has also been significantly re-written to include a more detailed Clojure CLI workflow and REPL Reloaded approach.
The refactor of https://github.com/practicalli/graphic-designrepository is still underway, so a few images may break temporarily.
Thank you to Cognitect and Clojurist Together for continuing to sponsor the Practicalli work (there is a lot more updates and additional content to come this year - see each books issue list)#2023-03-1114:46practicalli-johnMkDocs is written in Python and coupled with Material for MkDocs can produce some very professional looking and engaging websites with very little effort.
Whilst I would prefer to use Clojure to generate the sites, there currently seems less value in creating such a Clojure tool compared to improving the content and scope of the Practicalli books.
Maybe when I have finished the books (or retire) I'll have more time to write the ultimate Clojure tool for technical documentation 🙂#2023-03-1120:20pfeodrippeI feel you, John. I'm trying to use Clerk (+ a slightly modified version of https://github.com/JeremS/prose) to generate some documentation + blog-like articles (e.g. https://recife.pfeodrippe.com/notebooks/recife/notebook/slow_start.html and its https://github.com/pfeodrippe/recife/blob/master/notebooks/recife/notebook/slow_start.clj), but mkdocs really looks slick, I will test it on my day-to-day job (add try to replicate some of its features on my OSS work :P).
Thanks for your awesome work!#2023-03-1404:07mauricio.szaboHappy to see Pulsar there 🎉#2023-03-1215:41renewdoitJust released a small tool https://github.com/robertluo/clerk-doc, for those who want to write documents in Clojure; it turns your source code (well documented, hopefully) into a Markdown file, particularly Github’s README.md.#2023-03-1220:47pezNew release of Calva, a Clojure IDE extension for VS Code, https://github.com/BetterThanTomorrow/calva/releases/tag/v2.0.336:
• https://github.com/BetterThanTomorrow/calva/issues/2094
• https://github.com/BetterThanTomorrow/calva/issues/2094
• https://github.com/BetterThanTomorrow/calva/issues/2101
• https://github.com/BetterThanTomorrow/calva/issues/1984`connect`https://github.com/BetterThanTomorrow/calva/issues/1984
• https://github.com/BetterThanTomorrow/calva/issues/1908
• Fix: https://github.com/BetterThanTomorrow/calva/issues/2064
• Bump bundled deps.clj to v1.11.1.1252
TL;DR: It is now possible to configure Calva to present zero prompts when starting and connecting the REPL. It also brings full connect automation possibilities for Joyride users.#2023-03-1221:03bringeCorrection: It is now* possible to configure Calva to present zero prompts when starting and connecting the REPL.#2023-03-1312:53practicalli-johnhttps://github.com/practicalli/spacemacs-config for Clojure development with Emacs & CIDER & LSP
Small but valuable release to remove issue with (comment ... ) form when using LSP & clojure-toplevel-inside-comment-form t . This combination can cause cpu usage to hit 100%
• set lsp-eldoc-enable-hover nil in lsp layer variables to disable hover requesting markdown processing of doc-strings on hover #2023-03-1314:08Alex Miller (Clojure team)Hello all, today is the last day for the https://www.surveymonkey.com/r/clojure2023 - if you have not completed it yet, please do! If you know Clojurians not on here (perhaps in your own organization), it would be helpful if you could post it internally as well. The survey takes about 5 minutes. Thanks!#2023-03-1404:05mauricio.szaboI'll probably be the only one that put "Pulsar" in the editor section :rolling_on_the_floor_laughing:#2023-03-1316:35seriogaNew library in development.
https://github.com/strojure/web-security — Decoupled web security implementations for Clojure.
v0.1.0-12
• (feat api): add csp/header-name function
• (feat api): add csp/header-value-fn function
• (feat api): add csp/random-nonce function#2023-03-1410:46borkdudehttps://github.com/borkdude/edamame: configurable EDN and Clojure parser with location metadata and more
1.2.19 adds a convenience option to auto-resolve keywords based on the ns form.
Example:
(= '[(ns foo (:require [clojure.set :as set])) :clojure.set/foo]
(parse-string-all "(ns foo (:require [clojure.set :as set])) ::set/foo"
{:auto-resolve-ns true}))
Also see https://github.com/borkdude/edamame#auto-resolve-ns
Channel: #edamame#2023-03-1410:46borkdudecc @U1G0HH87L#2023-03-1416:13Jarrod Taylor (Clojure team)Announcing the first game released in the new https://clojure-arcade.com. I intend to release more games targeting Clojure development and general computer science topics. The first game is a pac-man clone that doesn’t focus on teaching anything specific but offers a fun way to interact with a classic game by solving puzzles in your repl. Most appropriate for those already comfortable with Clojure development. Check out the https://www.youtube.com/watch?v=WoSvzl8rWj0 and give it a try.#2023-03-1416:43pezSo cool! Let's all tweet like crazy about it. I started: https://twitter.com/pappapez/status/1635682851751329798#2023-03-1420:33pezWhen using Brave, I need to take the shields down for the http://clojure-arcade.com site in order for the websocket to connect.#2023-03-1516:08Quentin Le GuennecDoesn’t work on safari. (probably mixed content if its ws instead of wss)#2023-03-1516:20Quentin Le Guennecon level1, (>! mac-outgoing {:action :step :direction :right})does nothing after running (go (>! mac-outgoing {:action :start}))#2023-03-1516:55pezThere's a #clojure-arcade channel now! 🎉#2023-03-1516:56Jarrod Taylor (Clojure team)Will post a reply in the new channel.#2023-03-1517:14Noah Bogarti don't like to sign up for things without knowing what i'm getting into. Wanna put an "About" page on the front page?#2023-03-1516:55pezThere's a #clojure-arcade channel now! 🎉#2023-03-1704:01Noah Bogarthttps://cljdoc.org/d/io.github.noahtheduke/splint/0.1.119/doc/home: a Rubocop and Kibit inspired linter focused on style and code shape, providing an easily extendable interface for adding new and custom lints. (77 different rules and counting!)
v0.1.119 is upon us. It includes a whole bunch of deep changes and adjustments, but the primary one is clj-kondo style #_:splint/disable magic comments that allow disabling all or some rules in the following forms. With this feature, I feel that Splint is at a solid base of features and usability. Documentation is lacking a bit but I will be turning my attention toward it for the next release.
I’ve created #splint for discussion of the tool.#2023-03-1713:35borkdudehttps://github.com/clj-kondo/clj-kondo: static analyzer and linter for Clojure code that sparks joy ✨
2023.03.17
• https://github.com/clj-kondo/clj-kondo/issues/2010: Support inline macro configuration. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/config.md#inline-macro-configuration
• https://github.com/clj-kondo/clj-kondo/issues/2010: Short syntax to disable linters: {:ignore [:unresolved-symbol]} or {:ignore true}, valid in ns-metadata, :config-in-ns, :config-in-call
• https://github.com/clj-kondo/clj-kondo/issues/2007: new :var-same-name-except-case linter: warn when vars have names that differ only in case (important for AOT compilation and case-insensitive filesystems) (https://github.com/emlyn).
• https://github.com/clj-kondo/clj-kondo/issues/1269: warn on :jvm-opts in top level of deps.edn
• https://github.com/clj-kondo/clj-kondo/issues/2003: detect invalid arity call for function passed to update, update-in, swap!, swap-vals!, send, send-off, and send-via (https://github.com/jakemcc).
• https://github.com/clj-kondo/clj-kondo/issues/1983: add support for java member analysis, via new java-member-definitions bucket (https://github.com/ericdallo).
• https://github.com/clj-kondo/clj-kondo/issues/1999: add hooks-api/set-node and hooks-api/set-node? (https://github.com/sritchie).
• https://github.com/clj-kondo/clj-kondo/issues/1997: False positive on clojure.core/aget with more than two args
• https://github.com/clj-kondo/clj-kondo/issues/2011: push images to GHCR (https://github.com/lispyclouds)
• https://github.com/clj-kondo/clj-kondo/issues/2001: false positive :misplaced-docstring in clojure.test/deftest#2023-03-1713:41borkdudeInline macro config in action:#2023-03-1713:41borkdude:jvm-opts detection:#2023-03-1713:46Noah Bogartthese are some amazing features!#2023-03-1716:21phillinline macro configuration - great!#2023-03-1807:43keycheraI want to share a tool that I’ve been building and using myself
https://github.com/keychera/panas.reload — a hot reload tool for serving html/css with just babashka, this can also hot reload server that returns html, as well as htmx (since this tool relies heavily on htmx)
If you’ve ever used org.babashka/http-server to serve static html/css before, this has a variant that adds hot reload that you can install directly via bbin#2023-03-2405:43AlejandroHey. First, my feedback. I'm not familiar with babashka, maybe bacause of that, panas.reload doesn't work for me right away. But that's ok. Second, I love the idea of a standalone tool for html hot reloading, so, do you accept pull requests? Third, if yes, I'd like to add support of .edn files, so we could convert and write hiccup instead of html.#2023-03-2405:52keycheraI'll gladly accept pull request! @U03RQQ5E8Q1
Standalone tools is a nice idea since this tool currently needs babashka (and bbin) to install and use like a standalone#2023-03-2406:10AlejandroWell, by standalone I mean a jar or a babashka redistributable thing, independent of IDE. There's a live reload plugin for VS Code, but I'd like to edit html or hiccup in emacs. If not hiccup, it could be written in golang and be compiled to a single binary executable without dependencies.#2023-03-2406:20keycheraoh, I see! I think babashka project can be made a single executable using this method specified here but I haven’t explored it yet
https://github.com/babashka/babashka/wiki/Self-contained-executable#2023-03-2406:21AlejandroOh, that's neat, thanks for the link.#2023-03-1816:20Alex Miller (Clojure team)https://github.com/clojure/math.combinatorics 0.2.0 - Efficient, functional algorithms for generating lazy sequences for common combinatorial functions
• MCOMB-11 - Fix incorrect results, overflow in partitions-M#2023-03-1920:21viestiHi! I wanted to share a hack around sideloading new code into an AWS JVM/Clojure Lambda: https://github.com/viesti/clj-lambda-sideloader#2023-04-0412:01raymcdermottI missed this ... wow - great stuff 🙂#2023-03-2020:43Carsten BehringAs I settled on dev-containers for polyglot Clojure programming for data science, I published here:
https://github.com/behrica/clojure-datascience-devcontainer
a minimal setup which gives you a devcontainer having Clojure+python+R preinstalled. Devcontainer works now with and without vscode, thanks to https://github.com/devcontainers/cli#2023-03-2023:19Christian JohansenAnnouncing https://github.com/cjohansen/portfolio, a “visual REPL” for UI component development. It stands on the shoulders of devcards, and borrows heavily from Storybook.JS: Render UI components (or layouts) in isolation, quickly review components with varying input data, different resolutions, dark mode, etc. It comes with support for Reagent, Rum, Helix/Pure React, Dumdom, and even DOM objects or raw HTML strings out of the box, and adding support for other rendering technologies is little work (as illustrated by https://github.com/cjohansen/portfolio/pull/2)
Check out https://github.com/cjohansen/portfolio#readme for instructions on getting going and https://cjohansen.github.io/. The tool is usable but still in active development, and I’d love input, suggestions and help from anyone who wants a strong native ClojureScript alternative to Storybook.#2023-03-2222:24peterhI just wanted to test Portfolio with Helix, but as I tried to require portfolio.ui , I got a build failure back: The required namespace "snabbdom" is not available, it was required by "dumdom/core.cljs"..
Do I need to add another dependency besides portfolio or is this a problem with my deps resolution? I am using shadow-cljs.edn for dependencies and added [no.cjohansen/portfolio "2023.03.21"], maybe I can try deps.edn.#2023-03-2305:11Christian JohansenThanks for reporting! I have very limited experience with shadow, but this looks like a bug. I'll have a look at it. I've only used portfolio with figwheel-main. #2023-03-2714:38BorisKourt@U032GJ90EMA could you try the following: https://github.com/cjohansen/portfolio/issues/4
This seems to have resolved the above error for me but now I am stuck debugging some new ones just want to see if everything just works for you.#2023-03-2717:09Christian JohansenI have just now tried setting up a shadow project to test this myself, and ran into some problems. Looking into it 🙂#2023-03-2717:23peterhAFAIK shadow-cljs.edn is unable to process SHAs in :dependencies, so I had to use deps.edn for dependencies and link it to shadow via an alias. However, the latest SHA 6beb9521ef5b0f5a631fe6979530f99915730c51 seems to resolve the build failure for me, but I haven’t tested if the actual library works.#2023-03-2717:23Christian JohansenI have#2023-03-2717:23Christian JohansenI’m cutting a release now#2023-03-2717:50Christian JohansenFixed in 2023.03.28, make sure you read this: https://github.com/cjohansen/portfolio#shadow-cljs#2023-03-2719:36peterhNice, now I was able to test it and it works great! May try it on my app project when I am making more progress.#2023-03-2721:20Matthew DowneyWhoa very cool, this is exciting!#2023-03-2113:05borkdudehttps://borkdude.github.io/clj2el/: a cute little tool to translate Clojure snippets to Emacs Lisp for those who don't know Emacs Lisp that well (like me) clojure-spin emacs#2023-03-2113:43mkvlrthe borkdude way to enlightenment: I don’t understand this well, I’ll go ahead and implement it!#2023-03-2113:57genmeblogmkvlr revealing some internals 😄#2023-03-2114:06borkdudeNow with CLI (thanks @U3X7174KS) and with C-u M-| you can replace a region :)#2023-03-2310:38BenjaminIf it is not Clojure, the Bork will make it Clojure.#2023-04-0119:32kennytiltonCan it port Clojure to Emacs Lisp? thinking-face#2023-04-0119:43borkdude@U0PUGPSFR it tries ;)#2023-04-0119:43borkdudeoh you mean, the entirety of clojure? no#2023-03-2114:56zalkyNew! https://github.com/zalky/cues provides low-latency persistent blocking queues, processors, and graphs via ChronicleQueue.
For when distributed systems like Kafka are too much, durable-queue is not enough, and both are too slow (by orders of magnitude).
Cues extends https://github.com/OpenHFT/Chronicle-Queue and https://github.com/mpenet/tape to provide:
1. Persistent blocking queues, persistent tailers, and appenders
2. Processors for consuming and producing messages
3. Simple, declarative graphs for connecting processors together via queues
4. Brokerless, fault-tolerant exactly-once graph message delivery
5. Message metadata
6. Microsecond latencies (sometimes even less)
7. Zero configuration defaults
8. Not distributed
Hope it is helpful! :rightwards_hand: 🎁
https://github.com/zalky/cues#2023-03-2115:04thomasLooks like I could use something like this for my MQTT broker. Thanks!!!#2023-03-2115:07zalkyHappy to do it, hope it helps!#2023-03-2115:11thomashmm... I just noticed it said that you can store clj maps... but I would need to store raw bytes (with some meta data together in a map)#2023-03-2115:12mpenetOh interesting!#2023-03-2115:18zalky@U052852ES, I think I could make the encoder fully configurable with a single one liner. I'll have another look in the next day or two.#2023-03-2115:19thomasThank you. But I have to say I have no idea when (or if ever) I'll look into this.#2023-03-2115:19thomasSo don't feel pressured at all to do this.#2023-03-2115:21zalky@U050SC7SV, could not have done it without Tape. 🙂 Thanks for all the hard work on a great lib!#2023-03-2202:57mike_ananev@U0HJK8682 I've got some errors.
How to fix it? I'm on JDK 19.0.2 Mac M1.#2023-03-2203:19zalkyHi @U097654L8 , I'll have another look tomorrow but that initially looks like a Java version issue. ChronicleQueue does not support Java 19 yet: they https://github.com/OpenHFT/Chronicle-Queue/issues/1286, which are so far 8, 11 and 17.#2023-03-2212:45zalky@U052852ES, coming back to your question this morning, unless I've misunderstood it, I think the serialization layer already supports what you've described. You can wrap some bytes in a map with some metadata. Then write and read that back from the queue:
user> (def q (q/queue ::q))
user> (def a (q/appender q))
user> (def t (q/tailer q))
user> (def bytes-in (byte-array (map byte "data")))
user> (q/write a {:bytes bytes-in :metadata :meta})
83485574299648
user> (String. (:bytes (q/read t)))
"data"#2023-03-2212:45thomasCool, thank you @U0HJK8682! 🙏#2023-03-2900:49Lyn HeadleyVery cool.#2023-03-2910:24IvanAre there any resources/docs/books on how people use and develop with queues?
There is some material around queueing systems in relation with events, but especially for IPC I don't see a lot or I'm not searching correctly. I've only seen some very simple tutorials on how to build your own queue, how to use a queue API, etc, but nothing much around how to think and "architect" using queues.
(sorry, I guess this is a diversion of the main discussion 😞 )#2023-03-2920:13zalky@U8ZE1VBSS, not a diversion, that's a great question!
It sounds like you're not asking about how queues are used in algorithms, so I'll focus on program/systems design instead.
You also mention you've seen material on "queueing systems in relation to events", which I interpret to mean event messaging in distributed, or "big data" systems. So technologies like Kafka, and its use cases. If so, I think you're right that this tends to dominate the discussion nowadays.
That said, many of the concepts that apply to distributed systems also generalize to IPC, or really any concurrent computing problem. So for example, things like:
1. Change capture
2. Event sourcing
3. Decoupling consumers and producers
4. Managing process overload/backlog
5. Pub-sub
6. Implementing MVCC and other resource sharing strategies
7. Fault tolerance
All these things generalize to IPC, database design, and other scenarios that are not necessarily distributed, and are good jumping off points for your search on queue applications. I would also make sure to modulate your search to include "logs" since they are related, have similar design patterns, and are sometimes used interchangably with queues.
As for resources, if you haven't already encountered it, I found that "Designing Data-Intensive Applications" touched on logs and queues in many different contexts. And while its focus is not really queue or log specific, it is frankly a great read regardless.
Also, a long time ago I found https://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-should-know-about-real-time-datas-unifying to be a great introduction to how logs and queues fit into broader architectures like, databases, ETL, microservices, and distributed systems. It has supplemental links at the end.
You also might want to post your question in the main #C03S1KBA2 channel. There's such a wealth of knowledge there, I'm sure you'll get some very non-distributed queue specific resources!#2023-03-2116:50lilactownAnnouncing https://github.com/lilactown/flex, a reactive signals library for Clojure(Script).
• It shares a conceptual lineage with reagent's reactions, hoplon/javelin, and SolidJS.
• It supports both Clojure (JVM) and ClojureScript (JS) runtimes.
• It's goal is to provide a robust, glitch free reactive runtime with a convenient syntax
Current state: beta, ready for other people to try#2023-03-2121:36lilactownbtw, conversation can be had in #C04H5DMM99S#2023-03-2215:36oliySuperlifter 0.1.4 has just been released 🎉
Superlifter is an implementation of the DataLoader pattern for Clojure/script
https://github.com/oliyh/superlifter
This release adds support for:
• Use of Superfetcher where not all the requested resources exist https://github.com/oliyh/superlifter/pull/28 (thanks https://github.com/coyotesqrl)
This release fixes:
• Exceptions are propagated to lacinia promises https://github.com/oliyh/superlifter/pull/22 (thanks https://github.com/thumbnail)
• Muses added to debounce trigger during a fetch may not be fetched due to race condition https://github.com/oliyh/superlifter/pull/24 (thanks https://github.com/neominik)
Superlifter is generously sponsored by https://github.com/toyokumo#2023-03-2319:40Mark WardleNew release of https://github.com/wardle/hermes v1.1.1000 - a SNOMED CT terminology server.
• Open source Clojure SNOMED library and server
• Very fast - have it running in less than 5 mins
• Low system requirements
• Run anywhere- no dependencies except a filesystem
• Ideal for processing of clinical data in operational systems or analytics#2023-03-2322:32Alex Miller (Clojure team)https://github.com/clojure/data.int-map 1.2.1 is now available
• DIMAP-22 - Performance improvement to int-map range function#2023-03-2415:22bozhidarYesterday I released CIDER 1.7 (https://github.com/clojure-emacs/cider/releases/tag/v1.7.0), but I forgot to announce it. facepalm Enjoy!#2023-03-2415:44kennytiltonAnnouncing version 5.0.0-SNAPSHOT of https://github.com/kennytilton/matrix/blob/main/cljc/matrix/README.md, a generic, glitch-free, property-to-property reactive engine that works especially well for wrapping GUIs, but can be applied usefully to streams of data as well.
New this release:
• "async" formulaic cells (object properties);
• a single tiltontec.matrix.api NS to reduce require clutter;
• a useful :debug true option for formulaic cells;
• "observers" are now "watches", to avoid conventional misunderstanding of the word "observer".
Unchanged:
• mutable input cells;
• formulaic cells;
• global reach for dependencies or mutations;
• eager or lazy formulaic cells;
• anonymous cells, or "synapses";
• instance-specific cells;
• cell or object type specific "watch" functions for side-effects; and
• as always, the https://tilton.medium.com/the-cells-manifesto-b21ed10329f0.
While all that ^^^ is true, this release exists mostly to support an upcoming (Monday?) https://github.com/kennytilton/web-mx#readme release.
Not much doc yet, but DM at will for help getting started, or see you over at #matrix.#2023-03-2419:13bobcalcoAnnouncing release of cljr as open source under Apache 2.0 license:
https://github.com/apexdatasolutions/cljr#2023-03-2419:53borkdude@U2M7EC8KU Congrats. Windows only?#2023-03-2421:04bobcalcoNo it works on .NET core too. Basically targeting .NET Framework (Window) and .NET Core (cross platform). Problem for it on .NET Core is that MS took away saving binaries to hard disk via Reflection.Emit()... a problem that is rumored to be fixed with .NET Core 8.#2023-03-2421:05borkdudeah cool, I was confused by cljr.exe, so there is a cljr binary for macOS too?#2023-03-2421:06bobcalcoyeah on Mac you'd run it with dotnet cljr.dll <params>#2023-03-2421:06bobcalcoit builds both cljr.exe and cljr.dll on windows and you use the exe version there.#2023-03-2421:06borkdudeah cool, so you could make a bash wrapper that does that for you basically#2023-03-2421:06bobcalcoyup#2023-03-2421:08bobcalcoi have been focused on Windows/.NET framework as I'm also integrating with Office (think: legacy app modernization). But one of the main use cases is microservices so you'd want those to run on Core to deploy cross platform.#2023-03-2421:11bobcalco.NET is relative hot mess because of the runtime fragmentation over the years (.NET, silverlight, core, standard, winRT, etc). They are trying to tie it all back together again into Core, but because of the Reflection.Emit() restriction the perf on Core is slightly less on startup as the runtime has to compile the entire core clojure library on the fly. Once it's running it's fast; but the startup can take a few seconds. It's much quicker on .NET framework with precompiled libraries.#2023-03-2421:25bobcalcoi need to add detail about deps.edn for CLR purposes. Will add that to the readme over the weekend.#2023-03-2421:26borkdude@U2M7EC8KU Have you considered that some libraries may target both JVM and CLR, and how does a deps.edn for such a library look like if it has JVM + CLR dependencies?#2023-03-2421:26bobcalcothere are toplevel CLR-specific keys: :clr-deps and :clr-aliases. These are ignored by JVM tooling. cljr ignores :deps and :aliases.#2023-03-2421:27borkdudecool!#2023-03-2421:27bobcalcoThere, it's mostly documented already. LOL.#2023-03-2421:32bobcalco{:paths ["src/main/" :another-project-dir]
:clr-deps
{Some.Local.Library {:local/root :some-local-dir}
}
:clr-aliases
{:some-local-dir "C:\\libs\\"
:another-project-dir "C:\\projects\\another-project\\"}
:nuget/repos []
}#2023-03-2421:34bobcalcoKeeping in mind there could also be :deps and :aliases keys in the same file, that's the current functionality. adding git and nuget are the next two big priorities besides expanding aliases for tool execution.#2023-03-2421:34borkdudeSome.Local.Library => this needs to be a qualified symbol#2023-03-2421:35bobcalcoIt will be Some.Local.Library.dll on the hard drive, located at :some-local-dir.#2023-03-2421:35bobcalcoQualified names will relate more to nuget dependencies and git repos#2023-03-2421:35borkdudeI'd say that should be:
{:clj-deps {org/lib {:local/root "Some.Local.Library.dll"}}}
cf how deps.edn deals with .jar files. But better discuss this with @U064X3EF3#2023-03-2421:36bobcalcoOK, that's good feedback. Can make it a feature or enhancement request on the Issues tab.#2023-03-2421:36bobcalcowell wait#2023-03-2421:37bobcalco:local/root requires a path on the local drive, which in this case is provided by an alias#2023-03-2421:38bobcalco.NET formal names can be used in the first part of the k/v pair, but when referring to a specific folder, the short name of the assembly is enough.#2023-03-2421:40bobcalcoanother thing worth point out is that assemblies and jar files aren't quite the same thing. If the DLL is compiled by ClojureCLR, each namespace gits its own DLL, so the "correct" thing to do here will be somewhat dictated by a) .NET exigencies and assembly loading logic, and b) the design decisions that went into ClojureCLR up to this point. Java conventions will only be "somewhat" useful.#2023-03-2421:44bobcalcoBut yes - everything is on the table for discussion at this point.#2023-03-2421:48bobcalcoOnce the functionality is such that we're past the chicken-egg connundrum of needing cljr to build cljr, the implementation will move to Clojure - porting the tools related projects that currently are JVM specific.#2023-03-2421:48bobcalcoBut dependency management will require different logic on .NET than it does on the JVM, so I'm waiting to see how far NuGet integration handles that for us.#2023-03-2513:09practicalli-johnhttps://github.com/practicalli/clojure-cli-config provides a range of aliases to support a Clojure REPL development workflow, extending the functions available in Clojure CLI.
monthly library version updates and debug related aliases, see project http://changelog.org for full details
• Add sayid related aliases with middleware :repl/debug, :repl/debug-refactor, :repl/rebel-debug, :repl/rebel-debug-refactor
• :lib/flowstorm for flowstom debugger
• Add org.clojure/tools.trace to REPL Reloaded aliases - :repl/reloaded, :dev/reloaded
• Update :test/run to fail-fast by default, mimimising test runs when there are failed tests
• practicalli/clojure-cli-config repository renamed (changed from clojure-deps-edn) - GitHub will automatically redirect URLs
• main default branch (changed from live)
• ci: MegaLinter Java image 6.20.1
• ci: DeLaGuardo/setup-clojure 10.2, actions v3.5.0, clj-kondo v2023.03.17
• ci: workflows use main branch
• Update library versions using clojure -T:search/outdated (see project http://changelog.org for full details)
#2023-03-2519:31lreadrewrite-clj 1.1.47 - Rewrite Clojure code and edn
• Just wee fixes in this release relating to coercing strings to rewrite-clj nodes (thanks @borkdude!), see the https://github.com/clj-commons/rewrite-clj/blob/main/CHANGELOG.adoc#v1147---2023-03-25 for details.
rewrite-clj is one of the many projects under the loving care of https://github.com/clj-commons.#2023-03-2713:50Mateus Carvalhohttps://github.com/majorcluster/clj-state-machine - A simple state-machine API powered by clojure and datomic#2023-03-2715:25kennytiltonAnnouncing an old/new CLJS Web un-framework, https://github.com/kennytilton/web-mx#readme: straight HTML/CSS/SVG wrapped thinly by https://github.com/kennytilton/matrix/blob/main/cljc/matrix/README.md, a mature reactive engine featuring transparent dataflow between object properties. An overview/sample project is https://kennytilton.github.io/web-mx-quickstart/#/.
Old? Web/MX began twenty-five years ago as a Macintosh Common Lisp (now https://ccl.clozure.com/) desktop app that simulates a private Algebra tutor. That work culminated in an https://franz.com/products/allegro-common-lisp/ app serving https://qooxdoo.org/ over the wire, which is live here: http://tiltonsalgebra.com/#.
The heart of that work is a property-to-property dataflow engine we stumbled onto https://tilton.medium.com/the-making-of-cells-5ab873d1e6c7. Within a couple of days we were stunned (no joke) by how easily we could take U/I ideas from conception to working code. As we pushed it further and further we expected the wheels to come off, but they never did. More than once we turned to each other and marvelled, "It just works." But you have to code it to believe it.
Web/MX moved to the Web thanks to ClojureScript, and with that experience we executed a https://tilton.medium.com/simplejx-aweb-un-framework-e9b59c12dcff from scratch. Last year we executed https://github.com/kennytilton/flutter-mx, thanks to #clojuredart. Regardless of the backend, the D/X is the same: declarative, responsive U/I without exposed reactive wiring or Flux-like separate store maintenance. The dataflow is arranged automatically/transparently.
tl;dr: It is fun. And we are committed now to polishing, documenting and in general supporting both Web/MX and Flutter/MX. It took this long because we saw the community was already fully on board with the reactive paradigm, but the closer we have looked at existing solutions, and worked with them professionally, the more we realize MX-wrapped UIs have a lot to offer.
Back to earth, new this release:
• dynamic SVG;
• a glimmer of documentation;
• the aforementioned https://github.com/kennytilton/kennytilton.github.io/blob/main/web-mx-quickstart/README.md project;
• a https://github.com/kennytilton/web-mx-sampler/blob/main/README.md project where dead simple examples but also a complete https://todomvc.com/ implementation; and
• a https://github.com/kennytilton/matrix/tree/main/cljc/whoshiring of the live (JS version) monthly https://kennytilton.github.io/whoishiring/? response browser.
Announcing also a pedagogically minded series in which we evolve step-wise a live Web/MX inspector for running w/mx apps. That has begun with the Quick Start app as our test target, https://github.com/kennytilton/web-mx-workshop/wiki/The-Evolution-of-a-Web-MX-Inspector just being a cleanup of the beast. Whether you use Web/MX or Flutter/MX, the lessons there will apply.
Not much doc yet, but DM at will for help getting started, or see you over at #matrix.#2023-03-2803:01Matthew DowneySoon to be obviated with ChatGPT plugins around the corner, but I wrote this Chrome extension with CLJS to render ChatGPT code output in iframes.
https://github.com/matthewdowney/rendergpt
I've found it useful for e.g. drawing SVGs or describing a type of element I want and having it build it, with a REPL-like experience, but it is likely more useful for me because I am extremely bad at front end 🙂
I also got it to render PlantUML syntax, and I've tested e.g. pasting in some AWS CDK code and having it build a diagram of what the AWS deployment looks like. Open to suggestions if there's any other sort of structured output that would be useful to render too!#2023-03-2810:18pezSo very cool! Looks like demo material for a #C02V9TL2G3V meeting to me. WDYT, @U066L8B18 ?#2023-03-2810:31Daniel SlutskyWonderful 👀
Sure, @UP7RM6935 it would be lovely if you wish to discuss it on one of the meetings of the #C02V9TL2G3V group.
https://scicloj.github.io/docs/community/groups/visual-tools/#2023-03-2812:50Matthew DowneySure that sounds like fun, thank you guys!#2023-04-0423:11Matthew DowneyThis RenderGPT Chrome extension was accepted by the Chrome Web Store (https://chrome.google.com/webstore/detail/rendergpt/faedgcadnkineopgicfikgggjjapeeon), in case there's anyone who wanted to try it out but didn't want to install from source.#2023-04-0509:35pezInstalled. Rated 5 stars. 😃#2023-03-2803:41Alys BrooksWe released a security update for uri: https://github.com/lambdaisland/uri/releases/tag/v1.14.120. Fetch also uses uri and has been updated: https://github.com/lambdaisland/fetch/releases/tag/v1.3.74#2023-03-2806:43renewdoitLasagna-Pull first public release, 0.4.150, provides an intuitive pattern for you to query your complex and deep data structure.
https://github.com/flybot-sg/lasagna-pull#2023-03-2808:06borkdudeLooks pretty neat! It reminds me of meander, but I don't see a reference of it in the README. Do you know that project and how does it differ from it?
Why is the expression with variables quoted in lasagna but the variables extracted are not? I'm asking this out of pure curiosity. I see you've included a clj-kondo hook 💯#2023-03-2810:08borkdudeBtw, I tested your lib with babashka and it works there too:
https://clojurians.slack.com/archives/CLX41ASCS/p1679998087911039
Pretty cool#2023-03-2821:52renewdoitThank you for mentioning meander; I do not know it when writing lasagna-pull, the syntax of lasagna-pull does look like it, but it is just a coincidence. 😁 I studied meander just now, and I think it has a more extensive scope than lasagna-pull and is far more complex in terms of implementation for those additional features. I will update README later to compare them.#2023-03-2821:59renewdoitRegarding your question about symbol quoting in qfn macro: it is a limitation of the current implementation using Clojure’s reader; I will try to make it consistent if possible.#2023-03-2822:03renewdoitI appreciate your work on babashka and clj-kondo, and I enjoy using them very much. Thanks for testing the babashka compatibility of lasagna-pull; I will put a badge in the README; also, thanks for your quick contribution!#2023-03-2822:04borkdudeno problem, I was just curious, not necessary to change it#2023-03-2817:27chrisncnuernber/streams is a small concept library to efficiently build and execute monte-carlo simulations. It is based off the concept of lazy noncaching streams (eduction with transducers is similar). It allows you to do arithmetic on streams similar to how array languages allow you to vector arithmetic on arrays so it makes setting up your simulation a bit simpler and the code is of course pretty efficient -
https://github.com/cnuernber/streams#2023-03-2820:04otfromThis seems relevant to my interests#2023-03-2823:58chrisnThat is very cool - makes sense in retrospect#2023-03-2913:58chrisnOK - using the rng interface is helpful but the per-double protocol dispatch is adding a bit -
streams.api> (crit/quick-bench (let [r (fast-r/rng :mersenne)]
(dotimes [idx 10000]
(fast-p/drandom r))))
Evaluation count : 5292 in 6 samples of 882 calls.
Execution time mean : 113.685269 µs
Execution time std-deviation : 314.674972 ns
Execution time lower quantile : 113.321373 µs ( 2.5%)
Execution time upper quantile : 114.082204 µs (97.5%)
Overhead used : 2.011787 ns
nil
streams.api> (fast-r/rng :mersenne)
#object[org.apache.commons.math3.random.MersenneTwister 0x3c43ff33 "org.apache.commons.math3.random.MersenneTwister@3c43ff33"]
streams.api> (crit/quick-bench (let [r (fast-r/rng :mersenne)]
(dotimes [idx 10000]
(.nextDouble ^org.apache.commons.math3.random.RandomGenerator r))))
Evaluation count : 7014 in 6 samples of 1169 calls.
Execution time mean : 86.089678 µs
Execution time std-deviation : 463.845944 ns
Execution time lower quantile : 85.495519 µs ( 2.5%)
Execution time upper quantile : 86.708926 µs (97.5%)
Overhead used : 2.011787 ns
nil
I propose an additional protocol function that returns the fastest way to sample from the generator for uniform or gaussian - something like (let [f (fast-p/rand-fn rng :uniform)] (f)).#2023-03-2913:59chrisnI propose something similar for distributions - I can analyze the function and see of the rng or the distribution produce doubles, longs, or potentially something in ND space.#2023-03-2914:00chrisnwell, at least doubles, longs or objects - if the object is IFn$D, IFn$L, then I know it cannot produce anything but doubles or longs respectively.#2023-03-2914:19chrisnIf it is generally faster to sample into a double buffer and then pull from that then perhaps we could do that.#2023-03-2914:26chrisna mersenne gaussian stream is a lot slower than a mersenne uniform stream 🙂.#2023-03-2914:35chrisnNope, what we have is good enough I think for now - I do think there are faster ways if you know you are generating batches of numbers.#2023-03-2914:49chrisnnm - distributions take so long to calculate that the protocol dispatch time is noise.#2023-03-2914:49chrisnonly applies to samplers and then only applies to uniform samplers.#2023-03-2820:18yogthosmade a little library to express workflows using a state machine
https://github.com/yogthos/maestro#2023-03-2915:23fuadLooking good! I believe I remember reading an article on your blog about strucuring clojure apps this way. It also reminds me of https://lambdaisland.com/blog/2020-03-29-coffee-grinders-2
I'm interested in trying something like this out in the app I'm currently working and I might give this a try.#2023-03-2915:27yogthosYeah, coffee grinder pattern is pretty similar to what I'm thinking of as well. And this is extending the idea I mentioned in the blog. The original implementation I gave there was to use multimethods, but I think the one aspect that's missing with that is visibility into the state machine since transitions are implicit. Using a map to describe the state machine makes it clear how the states interact with one another.
I'm currently using a similar approach at work, and it's been working out well. I have an event based system where I need to track state and react to events as they come in. Using this sort of a state machine made it a lot easier to reason about.
Let me know how things go, suggestions and PRs are very welcome.#2023-03-3110:15JakubVery cool!
1. I am curious on your thoughts how to handle side effects? Would it be adding events for effects with impure handlers or some other way? I am thinking having separate impure handlers would probably be also good for testing, one could just assoc into the map to stub those out.
2. How would you compare the library to other FSM implementations, e.g. https://github.com/metosin/tilakone?#2023-04-0313:13yogthos1. I would treat the top level handlers as small independent programs that deal with side effects such as IO. The handler gets the current state and accesses whatever resources are needed, then returns a new state that gets passed on to the next state. I talk about this approach a bit more here https://yogthos.net/posts/2022-12-18-StructuringClojureApplications.html
2. And compared to other FSM libraries, my goal was to focus on helping facilitate decouple state computations from the routing. It aims to provide a general way to organize the application flow at high level. Each state handler does the computation, and then the dispatches decide what needs to happen next based on the state of the data. Typically, these tasks get conflated and become implicit in how the functions are chained together. I wanted to make this flow explicit.#2023-04-0316:10JakubThanks, that makes a lot of sense in the context of the blog post.
In the past, I have wondered about ways to make certain computations more explicit to improve understanding. FSM seems like it should be a good fit, but traditional FSM libraries felt a bit clunky for computation workflows and appear to be better suited for situations where an external actor is feeding inputs. I'm going to give it a try.#2023-04-0415:34yogthosYeah, that’s basically what I found as well. I tried using a few and wasn’t really happy with the ergonomics of expressing this kind of stuff. One thing I’d like to try adding would be to create something like generation of mermaid diagrams based on the FSM spec. Visually seeing workflows would be really nice for reasoning about them.#2023-04-0519:49JakubIndeed, generating mermaid/graphviz visualization sounds great. I wonder what would be the most frictionless way. Perhaps it might be possible to write a clj-kondo hook to get all maestro.core/compile occurrences and dump all machines in a codebase, that way if a new one is added it will get picked up automatically.#2023-04-0519:53yogthosThere are a few ways to do it. I made it so that the specs can be serialized to EDN, so technically you could stick them in a db or something as well.#2023-04-0423:11Matthew DowneyThis RenderGPT Chrome extension was accepted by the Chrome Web Store (https://chrome.google.com/webstore/detail/rendergpt/faedgcadnkineopgicfikgggjjapeeon), in case there's anyone who wanted to try it out but didn't want to install from source.#2023-03-2900:04hlshipio.aviso/pretty 1.4
https://github.com/AvisoNovate/pretty
Pretty prints things prettily; mostly, carefully formatted exception output using ANSI colors, smarter ordering, and name-demangling to take the pain out of figuring out what went wrong, and where.
Significant changes:
New function io.aviso.ansi/compose uses a Hiccup-inspired syntax to assemble strings with ANSI font characteristics.
(compose "Warning: " [:bold.bright-red "Reactor will meltdown in " [:inverse.white "4:27"]])
#2023-03-2906:57Lidor CohenIs there support for cljs?#2023-03-2914:26hlshipNot currently, but some of the namespaces could be made CLJS compatible, including the ansi namespace.#2023-03-2903:01pfeodrippeFirst cut of Wally (v0.0.1) was released.
A small wrapper (and experiment) over the JVM version of the Playwright webdriver (Playwright in the same category as https://github.com/clj-commons/etaoin webdriver, but leaning towards Cypress as there is huge support for testing).
https://github.com/pfeodrippe/wally.
Check out the attached video (EDIT: Modified the name of the library to Wally instead of Walstrom, the namespaces also have changed to respect that, I will record a new video soon).#2023-03-2905:08rickheereThis looks lovely.#2023-03-2906:08pezFantastic! Is it possible to call functions exposed by the web app being tested?#2023-03-2911:33pfeodrippeProbably, @U0ETXRFEW, didn’t try it yet, https://playwright.dev/docs/evaluating#2023-03-2911:36pfeodrippeThis is the Java version, https://playwright.dev/java/docs/evaluating#2023-03-2911:38pezCool. Looks like it would work.#2023-03-2913:51pfeodrippeModified the name to Wally instead of Walstrom =D#2023-03-2915:05pezAmazing. Took me 1 minute to have it controlling that web page!#2023-03-2915:06pezStumbling here on the example, though:
(w/click (s/a (s/attr= :href "/metosin/reitit")))
; No such namespace: s
#2023-03-2915:11pfeodrippeUpdated the README now o/ Thanks.
Note: use https://clojars.org/io.github.pfeodrippe/wally instead of the old project name.#2023-03-2915:12pezYes, I am using wally of course. 😃#2023-03-2915:15pfeodrippeGlad to see things are working, Peter!! #2023-03-2915:15pezNow works. Thanks!#2023-03-2915:17pezI just love that I can do these things from the REPL! ❤️#2023-03-2916:26pezI made a small example project out of the example in the Wally readme: https://github.com/PEZ/wally-example#2023-03-2916:34pfeodrippeAwesome!!! Thank you, man, just updated the README pointing to it ahahahahaah 🙏 #2023-03-2917:58Matthew DowneyThis is so cool!#2023-03-3009:23Ben SlessInitial release of Ring Middleware Tools - Small tools for the annoying parts of writing middlewares
Source: https://github.com/bsless/ring.middleware.tools
Clojars: https://clojars.org/io.github.bsless/ring.middleware.tools
Dedicated to my beloved colleagues, hopefully they and all Clojurians will find it useful 🙏#2023-03-3009:32EugenA new release of https://github.com/amperity/dialog is available, a minimalist Clojure SLF4J logging library.
Version https://github.com/amperity/dialog/blob/main/CHANGELOG.md#20115---2023-03-24 switches Dialog from the 1.7 SLF4J APIs to 2.0.
Pure Clojure consumers should see little direct change here, but this will impact the logging dependencies pulled in.
Thanks @greg316 for finding the time to review and merge my PR's#2023-03-3020:43borkdudehttps://github.com/squint-cljs/cherry: Experimental ClojureScript to ES6 module compiler 🍒
0.0.1
• Support cherry.embed namespace to embed cherry into a CLJS/shadow app.
• Many other small fixes
https://blog.michielborkent.nl/cherry-embed.html#2023-04-0117:20Matthew DowneyNice! @U04V15CAJ what's your workflow when writing in Cherry right now, do you have something set up to watch the source file, recompile the js, and reload the browser tab?#2023-04-0117:45borkdudeyes, but you can also use e.g. vite etc for this#2023-04-0117:46borkdudeHere is an example where babashka is used as the watcher for recompilation:
https://github.com/squint-cljs/cherry/tree/main/examples/jsx
and after that the JS dev tooling picks up on the newly compiled js#2023-04-0117:47Matthew DowneyBeautiful, thanks! Going to give this a try#2023-04-0117:48borkdudeI think it could be a better UX, e.g. that cherry would watch .cljs itself, something for down the road#2023-03-3104:44djblueJust released Portal https://github.com/djblue/portal/releases/tag/0.38.0, a data inspection / exploration tool for Clojure. Since the last announcement, Portal has seen a lot of improvements but here are some of the highlights:
• https://cljdoc.org/d/djblue/portal/0.38.0/doc/editors/vs-code/clojure-notebooks#portalnreplwrap-notebook
• https://github.com/djblue/portal/tree/master/examples/clr
• Load js from node_modules in https://cljdoc.org/d/djblue/portal/0.38.0/doc/guides/custom-viewer
• A jwt viewer for jwt string
• portal.api/docs for viewer docs
• https://open-vsx.org/extension/djblue/portal
Drop by #C0185BFLLSE with any questions.#2023-04-0312:24Dustin Getzlooks amazing#2023-03-3115:06Alex Miller (Clojure team)Clojure CLI 1.11.1.1267 is now available
• https://clojure.atlassian.net/browse/TDEPS-245 - Fix error in -X:deps find-versions with an uncanonicalized lib name
• Use https://github.com/clojure/tools.deps/blob/master/CHANGELOG.md 0.18.1331#2023-03-3115:38Joshua Suskalohttps://github.com/IGJoshua/coffi: Foreign Function Interface for Clojure version 0.6.409 is now available
• Support for JDK 19 (cut a release in preparation for work on JDK 20 support)
• Fixes for defining static variables that refer to native symbols
• Fixes for nil values being incorrectly passed to native code in native function literals
• Fixes for incorrect padding in some structs
• Changed the name of "scopes" to "sessions" to match Panama documentation (they renamed it in JDK 19)#2023-03-3116:47kuzmin_mhttps://github.com/darkleaf/di: DI is a dependency injection framework that allows you to define dependencies as cheaply as defining function arguments.
2.1.0
Now you can pass a vector as the key argument to start many keys. https://darkleaf.github.io/di/test/darkleaf/di/tutorial/q_starting_many_keys_test.html.
(with-open [root (di/start [`handler `helper])]
(let [[handler helper] root]
...))#2023-04-0111:55jiri.kneslhttps://github.com/Flexiana/unicorn-rainbow A macro that allows to write Clojure code like this:
(🦄🌈 (+ 1 🌻 2 🌹 3 🐾))
;; 6
(furry-add 2 5)
;; 7
(wowsies "Hello! 🐰🐰🐰")
;; Hello! 🐰🐰🐰
#2023-04-0117:02Martin PůdaYou can alias core functions as (def wowsies println) instead of (defn wowsies [strinput] (println strinput)) (and so on) ... but I guess that's the result of that intentional obfuscation, as well as (defn whirly-join [coll sep] (string/join sep coll)) with swapped arguments :D#2023-04-0210:18jiri.kneslHonestly, I have spent significant amount of time to make the code as unreadable as possible. 😄#2023-04-0113:59Danilo OliveiraI dunno if this channel is also for beginner showcases, but I'm happy to share my first public Clojure project!
https://github.com/danilomo/tenma-chess
It is a remote chess game made with reagent on client side and aleph on server side.#2023-04-0114:22borkdude> I dunno if this channel is also for beginner showcases
Yes! Congrats on your first project!#2023-04-0114:25Danilo OliveiraThanks, borkdude!!!!#2023-04-0114:40Matthew DowneyLove it!#2023-04-0119:03pfeodrippeFuderoso!!!#2023-04-1021:49Matt DeAngelisCongrats Danilo! Great work!#2023-04-2008:33Danilo Oliveira@U0518GLN8TF thanks a lot for your feedback!#2023-04-0122:00uochanJust released antq ver 2.3.1043 Tool to point out your outdated dependencies.
https://github.com/liquidz/antq
Added antq.api namespace for using antq as a library :)#2023-04-0207:24Roman LiutikovUIx has a starter template now at https://github.com/pitch-io/uix-starter
Or simply run npx create-uix-app my-app to scaffold a project from the template#2023-04-0216:50Dustin GetzElectric Clojure live tutorial: https://electric-examples-app.fly.dev/
Electric (https://github.com/hyperfiddle/electric) is a Clojure DSL for web development that uses a compiler to infer and manage the frontend/backend boundary.
If you haven't tried it yet. Try it! Here is the starter app: https://github.com/hyperfiddle/electric-starter-app
Support at #hyperfiddle#2023-04-0416:35eval2020https://github.com/eval/deps-try, a tool to quickly try dependencies on rebel-readline.
Upgrade/install via bbin install io.github.eval/deps-try
v0.3.6 (2023-04-04)
• Introduce examples-at-point keybinding to show examples from http://clojuredocs.org.
• Don’t prepend multi-lines with ‘#_ => ’.
• Improve eval-at-point for literal sets/lists, var-quote-ed and deref-ed expressions.
https://user-images.githubusercontent.com/290596/229809276-26bb6fa2-e780-40f6-94d3-80a0662af1ec.png#2023-04-0506:45Christian Johansenhttps://github.com/cjohansen/portfolio, a visual REPL for UI component development
Version 2023.04.05 is out:
• Support for React 18 components (and React 17, at your option)
• New APIs for controlling how Portfolio displays and organizes your scenes: https://github.com/cjohansen/portfolio#organizing-scenes#2023-04-0507:54Matthew Davidson (kingmob)Manifold 0.4.0 is out! The big change is that deferreds now implement the full CompletionStage interface. There's also better kondo support for many of the Manifold macros. Many thanks to Renan Ribeiro for contributing all this.
https://clojars.org/manifold/versions/0.4.0
https://github.com/clj-commons/manifold/blob/0.4.0/CHANGES.md#2023-04-0521:11lispycloudsNew version of https://github.com/lispyclouds/bblgum: An extremely tiny and simple wrapper around https://github.com/charmbracelet/gum is out now. Now featuring a fully backwards compatible, simpler and intuitive API, all thanks to @mb 🙏:skin-tone-5:#2023-04-0608:35Mark WardleNew release of https://github.com/wardle/hermes/releases/tag/v1.2.1080 - a SNOMED CT terminology library and server. 10k lines of Clojure. Faster and more capable than tooling I built previously using Java and Go. Changes:
• Support for concrete values - e.g. find all drugs with a particular dose
• Improvements to wildcard search (SNOMED expression constraint language)
• Support for the SNOMED machine readable concept model#2023-04-0618:15p-himikI want to shout out this XML parsing library that has been mentioned on this server only twice, and never in this channel.
It's very fast. Definitely will be my go-to library for all my XML parsing needs.
https://github.com/mudge/riveted#2023-04-0618:25SergioHave you tested it with babashka ?#2023-04-0618:28SergioI spent quite sometime trying to make work xml libs and the best solution I could get was using a pod that embeds hickory - it does the job but I would prefer something a bit simpler#2023-04-0618:28p-himikI haven't, no.#2023-04-0618:28Sergiook, I'll have to give it a try, thank you for the info.#2023-04-0618:33respatializedI think riveted wraps a pure-java library, so it might be feasible with babashka!#2023-04-0618:35respatializedhttps://github.com/dryade/vtd-xml#2023-04-0618:35p-himikActually, one of those two mentions was by @U04V15CAJ so maybe it's already supported?.. :)#2023-04-0618:36borkdudeI've used riveted at my old job :)
It does not work with babashka since it depends on a Java library: com.ximpleware/vtd-xml that is not built into bb. bb only supports running clojure sources and a selection of built-in Java classes#2023-04-0618:38p-himikBut, IIUC, it should be possible to make it work via a pod?#2023-04-0618:38borkdudethat would perhaps work yes#2023-04-0618:39borkdudebabashka bundles clojure.data.xml#2023-04-0618:40borkdudeHere is an example of parsing some XML and using zippers: https://github.com/babashka/babashka/blob/master/examples/pom_version_get_xml_zip.clj
Here is one without zippers: https://github.com/babashka/babashka/blob/master/examples/pom_version_get.clj#2023-04-0818:03Dustin GetzElectric v2-263 released, focused on deployment, hot code reloading fixes (confirmed), cljs advanced mode fixed, bugfixes. https://github.com/hyperfiddle/electric/blob/master/CHANGELOG.md. Deployment scripts now included in the starter app#2023-04-1013:57steffanI am very pleased to announce clj-otel release 0.2.0, a small idiomatic Clojure API for adding telemetry to your libraries and applications using OpenTelemetry. This milestone release adds Metrics API support to augment existing support for the Traces API. Feedback and support in #clj-otel
https://github.com/steffan-westcott/clj-otel#2023-04-1111:18Ertugrul CetinNew release of Enion Online: a 3D multiplayer PvP battle game written in Clojure and ClojureScript;
• Enemies NPCs have been added.
• A simple loot system has been implemented.
• A lag compensation bug has been fixed.
• The ping display has been fixed.
• Performance has been optimized by improving animations and implementing offscreen characters.
https://enion.io#2023-04-1111:23Anders EknertWow!!#2023-04-1111:49Cora (she/her)is the source available somewhere?#2023-04-1111:50Ertugrul CetinNot yet. I'm not sure if I'm going to release it in the near future. Things might change, though.#2023-04-1111:53Cora (she/her)someone was asking in #CQT1NFF4L about managing connections for game servers and your announcement came through which is why I asked. maybe you'd have some insights to share?#2023-04-1111:54Cora (she/her)https://clojurians.slack.com/archives/CQT1NFF4L/p1680883368245259#2023-04-1112:01Ertugrul CetinSure will do 👍:skin-tone-2:#2023-04-1112:36Cora (she/her)thank you!! #2023-04-1112:37AkizIt’s fun! I just have to learn how to fight 😄#2023-04-1112:41AkizCan I read somewhere about a stack technology you’ve used? Did you use js interop or some kind of wrapper?#2023-04-1113:07Ertugrul CetinI'm using the PlayCanvas game engine, re-frame, and reagent for the UI. I'm using the JavaScript interop library (js-interop).
For the backend, I'm mainly using Manifold and Aleph. Additionally, I'm using my own async library called procedure.async.#2023-04-1112:44zalkyRelease 0.2.1: https://github.com/zalky/cues provides low-latency persistent blocking queues, processors, and graphs via Chronicle Queue.
For when distributed systems like Kafka are too much, durable-queue is not enough, and both are too slow (by orders of magnitude).
This version:
1. Configurable message delivery strategy: exactly once or at most once
2. Resolves issues #1, #2, and #3
Hope it is helpful! :rightwards_hand: 🎁
https://github.com/zalky/cues#2023-04-1113:33kuzmin_mhttps://github.com/darkleaf/di: DI is a dependency injection framework that allows you to define dependencies as cheaply as defining function arguments.
2.2.0
Now you can define a service with a multimethod. https://darkleaf.github.io/di/test/darkleaf/di/tutorial/r_multimethods_test.html
(defmulti service
{::di/deps [::x]}
(fn [-deps kind] kind))#2023-04-1208:20Matthew Davidson (kingmob)https://clojars.org/org.clj-commons/gloss/versions/0.3.5 is now available. Gloss is a DSL for byte formats, designed for network protocols and binary file I/O.
The primary change is a bug fix for when your initial ByteBuffers use non-zero positions.#2023-04-1213:04Alex Miller (Clojure team)Clojure CLI 1.11.1.1273 (actually released 1 week ago, but forgot to announce)
• Fix regression in -Spom
• Updated help to include -X:deps mvn-pom rather than -Spom (which will eventually go away)
• Use https://github.com/clojure/tools.deps/blob/master/CHANGELOG.md 0.18.1335#2023-04-1215:17Matthew DowneyJust released v1.0.3 of https://github.com/matthewdowney/rich-comment-tests (turn rich comment forms into tests) with one fix:
• Bugfix for running tests in namespaces with top level sexprs which aren't seqable? (https://github.com/matthewdowney/rich-comment-tests/issues/20)#2023-04-1218:57ikitommi[metosin/malli "0.11.0"] is out! Malli is a high-performance data-driven data specification library for Clojure/Script. New stuff since last announcement:
• BREAKING: remove map syntax: mu/from-map-syntax, mu/to-map-syntax. AST and lite syntax remain unchanged.
• BREAKING: walking a :schema passes children instead of [id] to the walker function https://github.com/metosin/malli/issues/884
• Support converting recursive malli schemas to json-schema https://github.com/metosin/malli/issues/464, https://github.com/metosin/malli/issues/868
• Add #C03QZH5PG6M as alternative CLJS evaluator https://github.com/metosin/malli/pull/888
• Work with latest #C6N245JGG (& closure compiler) https://github.com/metosin/malli/pull/890
• Simplify uuid regex for accept non-standard and zero uuids https://github.com/metosin/malli/pull/889
• Add support for default branch ::m/default for :map schema, https://github.com/metosin/malli/pull/871
• mt/strip-extra-keys-transformer works with :map-of
• New m/default-schema to get the ::m/default schema from entry schema
• New m/explicit-keys to get explicit keys from entry schema (no ::m/default)
• Simplify content-dependent schema creation via new 3-arity :compile function, https://github.com/metosin/malli/pull/866
• Small improvements and bug fixes
Changelog: https://github.com/metosin/malli/blob/master/CHANGELOG.md#0110-2023-04-12
Code: https://github.com/metosin/malli
Big thanks to all contributors and clojurists-together for support.
Discussion and help getting started on #CLDK6MFMK#2023-04-1312:26Roman LiutikovUIx v0.9.0 just landed, thanks @biscuitpants for contributing 🙏
Changelog https://github.com/pitch-io/uix/blob/master/CHANGELOG.md
• Public API for linter plugins
• Hooks deps linting enabled by default
• Added support for most React Hooks for SSR on JVM#2023-04-1322:47Eric Scotthttps://github.com/ont-app/sparql-client#2023-04-1406:03flowthinghttps://github.com/eerohele/tab/blob/main/CHANGELOG.md#2023-04-14 of https://github.com/eerohele/tab, a tool for tabulating Clojure collections.
Noteworthy changes since the initial announcement:
• Support arbitrarily large values (mostly, hopefully)
• Support for zooming in on nested tables
• Support for copying values to clipboard
• Support for navigating to undatafied objects
• Show relative time since Tab received the value in the UI
• Improve support for back/forward buttons
• Bug fixes
See the (succinct) https://github.com/eerohele/tab#user-manual for instructions of use.#2023-04-1407:54Ferdinand BeyerThis week we released https://github.com/scarletcomply/license-finder, a simple tool to find licenses of the dependencies of your Clojure(Script) project!
• Supports deps.edn, shadow-cljs.edn and package.json / package-lock.json.
• Reads SPDX license IDs
• When projects do not include license information in their pom.xml/`package.json`, looks for LICENSE files in directories/jars
• Supports generating a CSV report
• Meant to be integrated into CI with tools.build#2023-04-1411:14eskosHi, first off this is wonderful! One question, are you going to make this into a Leiningen plugin yourself or do you perhaps require help with that? Leiningen is still the most used build tool, especially for existing projects, and this kind of license crawling is very important for businesses, especially in software consulting context where contracts and legislation have sometimes quite extensive requirements for compliance, so supporting it is quite important.#2023-04-1412:45Ferdinand BeyerHey @U8SFC8HLP — currently there are no plans of making a leiningen plugin. Mostly because we don’t use Leiningen at Scarlet.
Happy to accept contributions though!#2023-04-1412:08borkdudehttps://github.com/clj-kondo/clj-kondo: static analyzer and linter for Clojure code that sparks joy ✨
A brand new version with several new features, among which the ability to show the language context of lint warnings in .cljc files, one of the most requested features in the backlog!
2023.04.14
• https://github.com/clj-kondo/clj-kondo/issues/1196: show language context in .cljc files with :output {:langs true}. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/config.md#show-language-context-in-cljc-files.
• https://github.com/clj-kondo/clj-kondo/issues/2026: coercing string did not create StringNode, but TokenNode, lead to false positive Too many arguments to def
• https://github.com/clj-kondo/clj-kondo/issues/2030: Add a new :discouraged-tag linter for discouraged tag literals. See the https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#discouraged-tag.
• Add :gen support on clojure.spec.alpha/keys
• https://github.com/clj-kondo/clj-kondo/issues/1647: support :exclude-patterns in :unresolved-symbol linter
• https://github.com/clj-kondo/clj-kondo/pull/2036: False positive :def-fn on def + reify
• https://github.com/clj-kondo/clj-kondo/issues/2024: CLJS allows interop in constructor position
• https://github.com/clj-kondo/clj-kondo/issues/2025: support namespace groups with :unresolved-namespace linter
• https://github.com/clj-kondo/clj-kondo/issues/2039: :analysis :symbols + :aliased-namespace-symbol linter gives false positive in quoted symbol
• https://github.com/clj-kondo/clj-kondo/issues/2043: support ignore annotation on private calls
• Support :exclude-pattern in :unused-binding
• https://github.com/clj-kondo/clj-kondo/issues/2046: clj-kondo stuck in loop with multiple :or in destructuring
• https://github.com/clj-kondo/clj-kondo/issues/2048: better linting in schema.core/defn with invalid s-exprs
#2023-04-1412:45borkdude@UKFSJSM38 I'll follow up with a PR to clojure-lsp for the language context in the message as well#2023-04-1412:46ericdallo👍 I bumped kondo to latest dev release yesterday, would be nice to bump to this release now#2023-04-1412:46borkdudeok, I'll do it in the PR#2023-04-1413:40Alex Miller (Clojure team)Clojure 1.12.0-alpha2 is now available!
• https://clojure.org/news/2023/04/14/clojure-1-12-alpha2
• https://clojure.org/releases/devchangelog#v1.12.0-alpha2#2023-04-1413:41eggsyntaxYay, exciting!#2023-04-1413:44Alex Miller (Clojure team)There will likely be some questions on where and whether the new add-lib functionality will work in your environment. In general, you will at least need Clojure 1.12.0-alpha2 as your Clojure dependency, and the latest Clojure CLI https://clojure.org/guides/install_clojure (1.11.1.1273). Given those, add-lib should work in the user namespace for:
• Clojure CLI repl
• Calva (use latest)
• CIDER (if you start your repl with deps.edn/CLI)#2023-04-1413:47Alex Miller (Clojure team)It will not work at the moment in Cursive, mostly as the basis is not being injected, but this should not be hard to address.#2023-04-1413:52Alex Miller (Clojure team)Test it out like:
% clj -Sdeps '{:deps {org.clojure/clojure {:mvn/version "1.12.0-alpha2"}}}'
Clojure 1.12.0-alpha2
user=> (add-lib 'org.clojure/core.cache)
[org.clojure/core.cache org.clojure/data.priority-map]
user=> (require '[clojure.core.cache :as cache])
nil
add-lib returns the collection of libs that were added to your classloader, which as you can see here, may include transitive libs as well#2023-04-1413:54borkdudemetal#2023-04-1413:55Alex Miller (Clojure team)if you have followup questions - probably best to raise those in #C03S1KBA2 !#2023-04-1414:00borkdudeBest. Release. Ever.#2023-04-1414:12henrikNew product development workflow:
• Start a machine somewhere.
• Start the JVM + REPL.
• Add libs and eval code until production ready.
• Launch product.
• Profit.#2023-04-1414:14Alex Miller (Clojure team)well, we'd still like to encourage you to use deps.edn and define your dependencies in a managed way :)#2023-04-1414:15Alex Miller (Clojure team)the new sync-deps can help with this - add deps to your deps.edn, then call sync-deps to synchronize your repl by adding missing libs#2023-04-1414:29vnczadd libs!#2023-04-1415:01ericdallo@U04V15CAJ would make sense to make babaskha.process use the new clojure.java.process under the hood? I suppose there is probably some overlap though#2023-04-1415:04borkdudeno, it doesn't make sense. clojure.java.process is subset of what babashka.process supports (and some slight variations)#2023-04-1416:00slipsetclj-refactor had something like this, where it would add the lib both to your vm and your project.clj#2023-04-1416:10practicalli-johnTime for a weekend long add-lib, add-libs and sync-deps party 🥳
Thanks for all the hard work @U064X3EF3#2023-04-1417:49seancorfieldNice! I can finally retire t.d.a and :add-libs from my dot-clojure setup and just use the "official" stuff instead! And next week we'll start rolling Alpha 2 out at work to see if we still hit that memory leak we encountered with Alpha 1 🙂#2023-04-1418:07Alex Miller (Clojure team)yes, would very much like to hear about that if so#2023-05-0114:27Ivar RefsdalHi @U050WRF8X and @U064X3EF3
Great work!
I'm pretty confident that there is a bug at this line
https://github.com/clojure/clojure/blob/4090f405466ea90bbaf3addbe41f0a6acb164dbb/src/clj/clojure/repl/deps.clj#L40:
(when-not *repl* (throw (RuntimeException. "add-libs is only available at the REPL")))
*repl* is defined as:
(def ^:dynamic
^{:doc "Bound to true in a repl thread"
:added "1.12"}
*repl*)
and
user=> (def ^:dynamic *demo*)
#'user/*demo*
user=> (if-not *demo* (println "won't print") (println "will always print"))
will always print
so the (when-not *repl* ...) line will never "bite" regardless of thread type because an unbound variable is not logical false.#2023-05-0114:28borkdudeAh, that bit me too one time and that's why I wrote this linter:
https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#uninitialized-var#2023-05-0114:29borkdudeMaybe I should enable it by default in the next release...#2023-05-0114:29Alex Miller (Clojure team)thanks, I think with that and the clojure.main thing, we will probably be revisiting this in next alpha anyways. I have some tickets to make on some of this, but have been a bit busy :)#2023-05-0114:36Ivar RefsdalGreat!
I tried to use sync-deps from a thread handled by https://github.com/nextjournal/beholder and I noticed that the exception did not happen, but the function seemed to work otherwise.
Is there a use case for tool authors where sync-deps and friends should be (more?) easily available for "regular" threads?
I don't know nearly enough about lib resolving / classpath things to know if this is a lot of work or not.#2023-05-2117:48ThierryOh boy, I've been doing a home improvement for weeks and missed this completely. Can't push to git without kondo failing on uninitialized-var now, add :uninitialized-var :off will fix it?#2023-05-2117:48ThierryIt's not showing these warnings in vscode Calva#2023-05-2117:50borkdude@U02CX2V8PJN Please post clj-kondo questions in #CHY97NXE2 . I'm not even sure what your question is :)#2023-05-2117:51Thierrymy bad, thought I did, did my search on #CHY97NXE2 Will do#2023-04-1415:38Dustin GetzElectric Clojure https://electric-examples-app.fly.dev/user.demo-chat!Chat - multiplayer chat, auth, presence, backpressure, component lifecycle, todolist, 7 GUIs first pass#2023-04-1523:06seancorfieldhttps://github.com/seancorfield/honeysql -- Turn Clojure data structures into SQL:
2.4.1026 -- more ANSI/PostgreSQL syntax support:
• Fix https://github.com/seancorfield/honeysql/issues/486 by supporting ANSI-style INTERVAL syntax.
• Fix https://github.com/seancorfield/honeysql/issues/485 by adding :with-ordinality "operator".
• Fix https://github.com/seancorfield/honeysql/issues/484 by adding TABLE to TRUNCATE.
• Fix https://github.com/seancorfield/honeysql/issues/483 by adding a function-like :join syntax to produce nested JOIN expressions.
• Update tools.build; split alias :test/`:runner` for friendlier jack-in UX while developing.
2.4.1011 -- a documentation release:
• Address https://github.com/seancorfield/honeysql/issues/481 by adding more examples around :do-update-set.
• Address https://github.com/seancorfield/honeysql/issues/480 by clarifying the general relationship between clauses and helpers.
• Address https://github.com/seancorfield/honeysql/issues/448 by adding a new section with hints and tips for database-specific syntax and solutions.
Follow-up in #honeysql#2023-04-1707:48mpenetUpdated clojure ring adapter for nima (alpha6) is out: https://github.com/mpenet/mina#2023-04-1710:23jpmonettasClojureStorm: Omniscient time travel debugging for Clojure
I'm pretty excited to share the release of FlowStorm 3.4 together with the first release of ClojureStorm 1.11.1 !
ClojureStorm is a Clojure compiler only meant to be used at dev time, which provides automatic debugging instrumentation. It is a patch on top of the official Clojure compiler that extends it so it emits instrumented bytecode, removing much of the need for manual instrumentation.
I'm just releasing a version for Clojure 1.11.1, the current stable release, and one for 1.12.0-alpha2
people trying the latest alpha2 stuff.
If you want to try it now, here is a one liner :
clj -Sdeps '{:deps {} :aliases {:dev {:classpath-overrides {org.clojure/clojure nil} :extra-deps {com.github.jpmonettas/clojure {:mvn/version "1.11.1-1"} com.github.jpmonettas/flow-storm-dbg {:mvn/version "3.4.0"}} :jvm-opts ["-Dclojure.storm.traceEnable=true" "-Dclojure.storm.instrumentEnable=true" "-Dclojure.storm.instrumentOnlyPrefixes=user"]}}}' -A:dev
after the repl comes up just evaluate the keyword :tut/basics to lunch a in-repl tutorial that will guide you through the basics (it takes like 15 minutes).
I'm super interested in any kind of feedback, and of course if you have any questions show up in #flow-storm!
Repo : https://github.com/jpmonettas/flow-storm-debugger
Users guide : https://jpmonettas.github.io/flow-storm-debugger/user_guide.html
Cheers!#2023-04-1710:27p-himikOne tiny thing about the docs - in https://jpmonettas.github.io/flow-storm-debugger/user_guide.html#_clojure, the new method that you describe above is listed after the old method. People that like to follow docs while repeating the steps themselves will then try the vanilla method first, even though the new one seems like a much better fit for an interactive hands-on approach.#2023-04-1710:29jpmonettasyou are right! will change that, thanks!#2023-04-1713:51jpmonettasJust released com.github.jpmonettas/clojure {:mvn/version "1.12.0-alpha2"} for the people also experimenting with the new stuff in alpha2.
Please, if you are testing this and you find any bugs in the compiler don't forget to try it first on the official Clojure compiler before reporting it to the Clojure team!#2023-04-1710:28danielcomptonClojurists Together has a call for proposals for our next round: https://www.clojuriststogether.org/news/q2-2023-call-for-proposals-plus-april-survey-results/
We want to fund you to work on your open source Clojure project! clojurists-together #2023-04-1717:56borkdudehttps://github.com/babashka/cli: turn Clojure functions into CLIs!
v0.7.51 (2023-04-17)
• https://github.com/babashka/cli/issues/64: Support combined short options: -abc => {:a true :b true :c true}
• https://github.com/babashka/cli/issues/17: Support --no- prefix for negative flags: --no-colors => {:colors false}
Last update here was in December. Check 🧵 for other changelogs since then.#2023-04-1717:56borkdudev0.6.50 (2023-03-18)
• Improve auto-coerce: coerce "nil" to nil (https://github.com/teodorlu)
v0.6.49 (2023-03-10)
• Improve auto-coerce for keywords (https://github.com/teodorlu)
v0.6.48 (2023-03-07)
• Make babashka.exec compatible with clojure CLI 1.11.1.1152+
v0.6.46 (2023-02-19)
• https://github.com/babashka/cli/issues/58: implicit true should not be transformed to string value
v0.6.45 (2023-01-27)
• Preserve exception cause in coercion for better error messages
v0.6.44 (2023-01-18)
• https://github.com/babashka/cli/issues/56: :exec-args should be replaced, not merged
v0.6.43 (2023-01-13)
• https://github.com/babashka/cli/issues/55: Last keyword option not parsed when previous value is implicit boolean
#2023-04-1815:51oliyHi all, martian 0.1.23 has been released.
martian is a library providing abstraction over your http client, supporting Swagger, OpenAPI and your own custom definitions.
https://github.com/oliyh/martian
This release adds support for:
• Babashka! https://github.com/oliyh/martian/pull/165 thanks https://github.com/borkdude
• explore return value now indicates deprecated endpoints https://github.com/oliyh/martian/pull/164 thanks https://github.com/wkok
• Support for local file definitions https://github.com/oliyh/martian/issues/174 https://github.com/oliyh/martian/pull/175
This release improves:
• Upgrade clj-http-lite implementation https://github.com/oliyh/martian/issues/170
• Remove old notice from README https://github.com/oliyh/martian/pull/173 thanks https://github.com/The-Alchemist#2023-04-1901:30timodoes this mean, that this is now native-compileable?#2023-04-1908:16oliyhello, yes it should be#2023-04-1818:04mccraigmccraighere's a teeny hooks-based state-management thing for #helix based react apps : https://github.com/mccraigmccraig/deepstate#2023-04-1818:54pezHaha, fantastic name!#2023-04-1818:55mccraigmccraig@U04V15CAJ is wholly responsible for the name :)#2023-04-1818:06mccraigmccraigand here's a manifold-like async streams API which also does ClojureScript, error propagation and chunking : https://github.com/yapsterapp/promisespromises#2023-04-1819:29sergey.shvetsTwo out of two for fantastic names 😄#2023-04-1909:23ah45woohoo so great to see this out in the wild! I’ve had the pleasure of using promisespromises extensively when working at Yapster and I wouldn’t want to be doing stream processing any other way; congrats on the release @U0524B4UW 🐶#2023-04-1818:57Christian JohansenNot sure if this is the place for it, but I just created #portfolio to discuss https://github.com/cjohansen/portfolio - a visual REPL like devcards/storybook in ClojureScript. Just did a presentation on it that will be available on YouTube eventually, and someone suggested creating a channel 🙂#2023-04-1820:13Sam RitchieAnnouncing v0.30.0 of the #emmy computer algebra system… this is the first release since the rename from “sicmutils”, and features some wonderful @colins work on making function compilation really fast, plus a new site (!!) at https://emmy.mentat.org/, a logo, and a https://emmy.mentat.org/#project-template.
• GitHub: https://github.com/mentat-collective/emmy
• Clojars: https://clojars.org/org.mentat/emmy
• release notes: https://github.com/mentat-collective/emmy/releases/tag/v0.30.0
This release sets the stage for more interactive animations like this https://emmy-viewers.mentat.org/dev/examples/simulation/toroid.html example, or this https://emmy-viewers.mentat.org/dev/examples/simulation/quartic_well.html .#2023-04-1909:19Dainius JocasAnnouncing v2.0.0 of the https://github.com/dainiusjocas/clj-jq jackson-jq wrapper 🥳 The highlights of the release are:
• the shiny and new https://github.com/dainiusjocas/clj-jq#transducer-api
• support for the compile and runtime and https://github.com/dainiusjocas/clj-jq#variables-for-the-expressions
• fix for cases when jq expression return multiple JSON entities#2023-04-1913:07practicalli-johnhttps://github.com/practicalli/project-templates - a series of project templates for seancorfield/deps-new tool.
Templates provide https://practical.li/clojure/clojure-cli/repl-reloaded/ support and common production-level configuration files and CI workflows
• Portal - launched on repl startup (when dev on path) and listening to all evaluations over nREPL and via custom mulog publisher
• Repl reloaded tools: Clojure tools.deps hotloading (Clojure 1.11.x & 1.12 examples), tools.namespace / Integrant REPL (other system component libraries to follow)
• Make - simplify user experience with consistent Makefile tasks across all templates (one day I'll write a Babashka task runner equivalent)
• Docker configuration
◦ Multi-stage Dockerfile using Clojure tools.build to create an uberjar and run via a init process in the runtime image
◦ compose.yaml to build the Clojure service locally and optionally run persistence services in containers (e.g. postgres, mysql)
• GitHub CI Workflows
◦ MegaLinter providing a wide range of quality checks for code and configuration files
◦ clj-kondo with reviewdog comments on pr (surfaces issues in conversation),
◦ cljstyle format checks and configuration compatible with CIDER and Clojure LSP formatting
◦ changelog checker to encourage communication about the project
◦ scheduled version check (antq daily report of new library and GitHub action versions)
https://github.com/practicalli/project-templates/releases is the third release of this project and provides the templates (although I only started the project a few weeks ago)
• practicalli/application - Clojure application with base application code and unit tests (including REPL Reloaded workflow tools and prod configuration files)
• practicalli/service - a Clojure service, managed by Integrant & IntegrantREPL, using http-kit, reitit, mulog & mulog trace middleware and base example
The Practicalli Project Templates are also included in the :project/create alias from the https://practical.li/clojure/clojure-cli/practicalli-config/, as well as a separate :project/templates alias.
There is a roadmap of templates I'm interested in developing for the practicalli/project-templates project at the top of its project readme.
I've also published https://practical.li/blog/posts/create-deps-new-template-for-clojure-cli-projects/#2023-04-1914:51Alex Miller (Clojure team)Clojure https://clojure.org/releases/downloads#_development_release_1_12_0_alpha3_apr_19_2023 is now available
• Reverts the fix for https://clojure.atlassian.net/browse/CLJ-2521 in alpha2 - this fix changes the context where https://clojure.atlassian.net/browse/CLJ-2743 (not yet fixed) is seen, so will revisit a fix for these in tandem#2023-04-1915:16Noah Bogartoh that's complicated, nice#2023-04-2720:09Cezary> fix for ... this fix ... (not yet fixed) ... will revisit a fix
My commit messages are sometimes like that. I feel you. 🫂#2023-04-1916:58ericdalloclojure-lsp Released https://github.com/clojure-lsp/clojure-lsp/releases/tag/2023.04.19-12.43.29 2023.04.19-12.43.29 with performance improvements and improved java support!
• ⚡clojure-lsp feedback for Editor UI is faster (Emacs users you may notice that reducing lsp-idle-delay to something lower like 0.05)
• 🎉 We now have a https://twitter.com/ericdallo/status/1647340150429458433?s=20 from documentSymbolfeature, showing all keyords of a edn for faster navigation/visualization!
• javaSince last month I'm focusing on improve java support for clojure-lsp, this release adds support for completion of Static java classes (for now only for classes from .class, not .java, check print), I'm working on improvements on clj-kondo and clojure-lsp to improve that even further being able to see docs of java methods and more, stay tuned!
Thank you for all contributors and sponsors, especially #clj-together gratitude clojurists-together
For more info, check #lsp#2023-04-1917:37dharriganI think the version is a bit off?#2023-04-1917:37ericdalloops 😅 thanks!#2023-04-1917:40dharrigannp 👍#2023-04-2007:07robert-stuttafordthank you so much!#2023-04-2013:46Jarrod Taylor (Clojure team)Three additional levels have been added to https://clojure-arcade.com/mac-man/ in the Clojure-Arcade. Discussion welcome in #C04UT870D9N
• The highest level is a complete map with all four ghosts.
• Squashed several edge case bugs that could occur when reversing directions after teleporting to the other side of the map.#2023-04-2018:02Christian Johansenhttps://github.com/cjohansen/portfolio, the visual REPL (like devcards, Storybook) has a new release: https://clojars.org/no.cjohansen/portfolio. There are quite a few improvements and new features:
• Lots of UI improvements
• Compare scenes side-by-side
• Markdown docstrings and code preview
• Improved support for stateful scenes with atoms
• Fulltext search
Check out the changelog for details: https://github.com/cjohansen/portfolio#20230421
There is now also a video presentation demonstrating the how and why of most features: https://www.youtube.com/watch?v=25JDQRFoQ_U#2023-04-2018:51borkdudeHey @U9MKYDN4Q. Just a gentle reminder that it's a "soft" rule of this channel to post updates about a project about once a month, while more frequent updates and minor releases can go into #C015AL9QYH1.#2023-04-2018:54Christian JohansenAlright, I know I've read this before, but not fully internalized I guess. Thanks for the nudge 🙏 #2023-04-2106:48Christian JohansenAnnouncing phosphor-clj: All the wonderful icons in the open source Phosphor icon package as hiccup. Works with both Clojure and ClojureScript, and comes with tooling to make sure your ClojureScript bundles only contain the specific icons you use. https://github.com/cjohansen/phosphor-clj#2023-04-2106:54slipsetWould a macro that accepts a list of icons to import be valuable?#2023-04-2106:56Christian JohansenYes, probably. I considered adding it. PR welcome 🙂#2023-04-2106:57Christian JohansenI ended up with the macro that imports a single icon because I figured it would be the best way to make sure you import all the icons you use - wrap every keyword in the macro instead of maintaining a separate list. But I can see the use of both.#2023-04-2106:58slipsetYah, and how much extra effort is it to call that macro a couple of times, really. #2023-04-2106:59Christian JohansenI did add one to load all of them in order to make sure it all worked. Calling that macro by hand 7k times was too much 😄#2023-04-2107:04slipsetC-u 7000 C-x e ?#2023-04-2114:00teodorluhuh icons/render, just returns data? Nice!
So this should work for server-side generated HTML :thinking_face:#2023-04-2114:14Christian JohansenYep!#2023-04-2114:15Christian JohansenData all the way down 😄#2023-04-2112:20borkdudehttps://github.com/babashka/babashka: Native, fast starting Clojure interpreter for scripting babashka
https://babashka.org/conf/ is happening June 10th in Berlin. Save the date and/or submit your babashka/clojure-related 20 minute talk in the CfP! 🎉
1.3.177 and 1.3.178 (2023-04-18)
• https://github.com/babashka/babashka/issues/1541: respect bb.edn adjacent to invoked file. This eases writing system-global scripts from projects without using bbin. See https://book.babashka.org/#_script_adjacent_bb_edn.
• https://github.com/babashka/babashka/pull/1523: Reduce the size of the Docker images (https://github.com/raszi)
• Upgrade deps.clj to v1.11.1.1273
• Upgrade transit-clj to 1.0.333
• Add java.security.cert.CertificateFactory
• Bump clj-yaml to 1.0.26
• Bump edamame to 1.3.21
• Add UnsupportedOperationException
• Bump babashka CLI to 0.7.51
• Bump babashka http-client to 0.2.9
• Add --install-exit-handlers to native-image build to support shutdown hook + SIGTERM#2023-04-2113:19borkdudeAdded a Windows section for the script-adjacent bb.edn solution:
https://book.babashka.org/#_script_adjacent_bb_edn
cc @UBLU3FQRZ if you're interested#2023-04-2218:26genmebloghttps://github.com/generateme/fastmath version 2.2.0 released. List of changes is quite long, the most important things:
• fastmath.core, fastmath.random and fastmath.stats revisited
• new approach for data bootstrap: fastmath.stats.boostrap
• fixed sizes matrices (2x2, 3x3, 4x4): fastmath.matrix
• root solver fastmath.solver
• log-exp functions
• statistical tests
• effect sizes
• 2x2 contingency tables measures
• zero adjusted/inflated/altered distributions
• floating point arithmetic with error bounds fastmath.efloat
• https://generateme.github.io/fastmath/notebooks/ (WIP)#2023-04-2415:25CameronAnnouncing https://github.com/cjbarre/multi-gpt: A Clojure interface into the GPT API (mainly chatgpt at the moment). Still early days, but check it out if you’re interested. I’m aware this intersects with Langchain, I’m interested in the possibilities of python interop, but also want to see about building a Clojure toolchain for some of this stuff.
Current features:
• In memory Conversation Manager (conversational memory)
• In memory Task Manager (rudimentary agent system, WIP)
On the roadmap:
• An external memory architecture from this paper: https://arxiv.org/abs/2304.03442
• Enhanced agent support
• Durable Conversation / Task Manager
• More#2023-04-2415:54eggsyntaxNice, thanks for doing this! So far I've just been using langchain in python but definitely thinking it'd be nicer to be handling it all in clojure...#2023-04-2415:57CameronAppreciate it, the project is certainly a ways off from everything Langchain can do, we’ll see how it goes.
Could be interesting to combine the two with libpython-clj.
It’s moving data around, why not Clojure 🙂#2023-04-2417:10ericdalloLinking the channel: #C054R2069AQ#2023-04-2504:31mjhikahttps://github.com/mjhika/babashka-dl
I've made a small script to install babashka babashka easily on windows. It supports an override directory and version.
If you find that you're not deploying scoop to windows endpoints but still want bb quickly and easily, then this might be a good fit.
If you want automatic updates stick with scoop this isn't trying to replace that#2023-04-2507:13genmeblogGenerative coding / visualization library: https://github.com/Clojure2D/clojure2d 1.4.5 released. What's new / changed:
• fastmath.color revisited
• Oklab color space family
• :onrepaint window mode (to limit refreshing and CPU consumption)
• mixbox from Secret Weapons (mind the licence of usage)
• renderer refactoring (linear and splats modes)
• mkl dependency removed
• https://clojure2d.github.io/clojure2d/docs/notebooks/notebooks/color.html documentation for fastmath.color
• clj-kondo hooks#2023-04-2508:37flowthingv0.18.0 (alpha) of Tutkain, a zero-dependency sublimetext package for interactive Clojure development, is out (https://tutkain.flowthing.me, https://github.com/eerohele/Tutkain/blob/master/CHANGELOG.md#0180-alpha---2023-04-25).
Highlights:
• https://tutkain.flowthing.me/#choosing-connection-mode for both RPC-style (one connection) and REPL-style (two connections) communication between the client and the runtime
• A https://tutkain.flowthing.me/add-lib2.mov over clojure.repl.deps/add-lib and clojure.repl.deps/sync-deps (requires Clojure v1.12.0-alpha2 or newer)
Note that if you use Tutkain with Babashka, you must update to Babashka v1.1.171 to use this version of Tutkain.
Follow up in #C030F786GAD.#2023-04-2519:07phronmophobicThe add-lib UI is neat. If you're interested, you can also get a list of git deps on github from https://github.com/phronmophobic/dewey/releases/latest/download/deps-libs.edn.gz.#2023-04-2605:01flowthingThanks! I’ll check it out. 👍:skin-tone-2: #2023-04-2818:09flowthing@U7RJTCH6J how often is that updated?#2023-04-2818:09phronmophobicOnce a week. Usually on Mondays.#2023-04-2818:10flowthingCool, thanks. The dump is small enough that downloading the whole thing every time probably isn’t a problem, either.#2023-04-2819:21flowthingWelp: https://tutkain.flowthing.me/add-lib3.mov#2023-04-2819:22flowthingIf you ever decide to make a HTTP API, I’m interested. 🙂 In the meantime, this oughta work, at least until Clojure explodes in popularity and that dump becomes gigabytes big.#2023-04-2819:27phronmophobicIm also open to other formats if you have suggestions.#2023-04-2819:36flowthingNah, this works for me. In an ideal world, there’d be something like https://search.dewey.org/search?q=whatever, but that would cost money and time to maintain, of course. 🙂#2023-04-2819:37flowthingThanks for the suggestion and for making Dewey! 👍#2023-04-2820:37phronmophobic> Nah, this works for me. In an ideal world, there’d be something like https://search.dewey.org/search?q=whatever, but that would cost money and time to maintain, of course.
Yea, I've been investigating options for hosting a public, read only database, but haven't found a solution that I've been happy with.#2023-04-2514:59Joshua SmockHey y’all 👋 Quick intro: I’m Josh, an engineer at Pitch. I’m happy to announce that we’ve just publicly released https://github.com/pitch-io/cljest, which is a ClojureScript wrapper for https://jestjs.io, a very popular testing framework in the JS community, especially when dealing with frontend applications and component tests. We’ve been using it internally for a while now with great success and are happy to release it to the wider community. There are comprehensive docs on the https://github.com/pitch-io/cljest#documentation repo and https://cljdoc.org/d/com.pitch/cljest/1.0.0/doc/readme to get started.
Some features at a high level:
• Very similar API to cljs.test , and support for unit tests via is .
• Support for component tests via JSDOM, a pure-JS DOM implementation.
• Async support without needing to deal with a done callback and a built-in async / await style macro.
• Simple ability to fake timers such as setTimeout .
• Simple configuration, and none needed for simple setups.
I’ve made a #cljest channel for questions, comments, issues, etc. around cljest and Jest in general, and I’m happy to help if you have any questions!
Happy Jesting 🙂#2023-04-2515:02Roman LiutikovFor context: we are using cljest at Pitch for component testing where Cypress tests tend to be unnecessarily expensive, it's working great for us thus far.#2023-04-2604:32tatutthis looks great and well documented… will definitely try it out#2023-04-2614:13Dmytro BuninAdded it to work project already. Works great, thanks for releasing it! pitch#2023-04-2617:56practicalli-johnhttps://github.com/practicalli/clojure-cli-config/ - user aliases for community tools
2023.04.26 - alias and library updates
Minor breaking change: :env/dev and env/test renamed to :dev/env and :test/env
• yaml support in portal for :repl/reloaded and :dev/reloaded aliases
• Integrant REPL support for :repl/reloaded and :dev/reloaded aliases
• nREPL support for :repl/inspect
• project/templates alias for use with deps-new, providing Practialli designed project templates
• project/create-local to support development of Practialli project templates
• ci: antq library version checks scheduled daily via GitHub workflow
• deprecated: :security/nvd should be run as a tool to avoid false positives
https://github.com/practicalli/clojure-cli-config/releases/tag/2023.04.26#2023-04-2708:56Alex Miller (Clojure team)If you're interested in streaming the talks today and tomorrow at Clojure/conj, you can still register for that at https://ti.to/cognitect/clojureconj-2023 - the conference starts in 4.5 hrs!#2023-04-2709:12borkdudeYes, looking forward!#2023-04-2710:32kennytiltonGot my streaming ticket and 🍿 , have a great Conj,#2023-04-2713:38ordnungswidrig📺#2023-04-2714:15dchelimskyhttps://groups.google.com/g/clojure/c/RZ_aYgltedU/m/FM47uVpOAAAJ
0.8.666 / 2023-04-27
• 301 gets cognitect.anomalies/incorrect instead of cognitect.anomalies/fault https://github.com/cognitect-labs/aws-api/issues/237
0.8.664 / 2023-04-26
• Safely return byte arrays from ByteBuffers, honoring the position and remaining attributes, copying the underlying byte array when necessary. https://github.com/cognitect-labs/aws-api/issues/238
• Upgrade to com.cognitect/http-client "1.0.123", which includes status and headers in anomalies. https://github.com/cognitect-labs/aws-api/issues/171 https://github.com/cognitect-labs/aws-api/issues/15
Obs: the anomaly fix provides users the opportunity to detect 301s and programmatically recover when the "x-amz-bucket-region" header is present.#2023-04-2714:40genmebloghttps://github.com/generateme/fitdistr 1.0.5 - fitting distributions to a data. New distributions are supported :bb (beta binomial), :half-normal and :logarithmic. Inferece for :levy and :nakagami improved.#2023-04-2716:17borkdude:bb 👍#2023-04-2716:35genmeblogso, we need babashka statistical distribution for sure! 🙂#2023-04-2719:20genmebloghttps://github.com/scicloj/wadogo 1.0.0 - Scales (like d3-scale) for Clojure released. Dependencies update and small fixes. Clerk documentation https://scicloj.github.io/wadogo/index.html#2023-04-2801:05Noah Bogarthttps://cljdoc.org/d/io.github.noahtheduke/splint/1.3.1/doc/home 1.3.1 - Clojure linter focused on style and code shape.
New rules since 1.2.4:
• naming/single-segment-namespace: Prefer (ns foo.bar) to (ns foo).
• lint/prefer-require-over-use: Prefer (:require [clojure.string ...]) to (:use clojure.string). Accepts different styles in the replacement form: :as, :refer [...] and :refer :all.
• naming/conventional-aliases: Prefer idiomatic aliases for core libraries (`[clojure.string :as str]` to [clojure.string :as string]).
• naming/lisp-case: Prefer kebab-case over other cases for top-level definitions (aka prefer (def some-var 1) to (def some_var 1) or someVar )
• style/multiple-arity-order: Function definitions should have multiple arities sorted fewest arguments to most: (defn foo ([a] :a) ([a b] :b) ([a b & more] :c))
Swing through #splint for further conversation.#2023-04-2812:15fogus (Clojure Team)The Clojure team is proud to introduce Morse, a graphical, interactive tool for browsing and inspecting Clojure data, evolved from REBL. Morse is open source, licensed under the Apache license.
You can find information about Morse at the following URLs:
• https://clojure.org/news/2023/04/28/introducing-morse
• https://github.com/nubank/morse
• https://github.com/nubank/morse/blob/main/docs/guide.adoc
• https://ask.clojure.org/index.php/tools/morse
• https://github.com/nubank/morse/issues
Live discussion of Morse happens in the Clojurians Slack channel #C055EHYAY1Z#2023-04-2815:25seancorfieldFollowing the announcement of XTDB 2.0 and the availability of snapshot builds for early testing and feedback, here's an experimental extension of next.jdbc that works with the SQL API of XTDB: https://github.com/seancorfield/next.jdbc.xt -- follow-up in #xtdb#2023-05-0113:34zalkyhttps://github.com/zalky/reflet [0.3.0-rc1] introduces https://github.com/zalky/reflet/wiki/Polymorphic-Descriptions: a new kind of polymorphic query. Compared to union queries, Reflet's descriptions are:
1. More expressive, extensible, and re-usable
2. More suitable for complex data
3. More data-driven
4. Easier to integrate with remote ontology, schema, or knowledge representation layers
You can read more about polymorphic descriptions https://github.com/zalky/reflet/wiki/Polymorphic-Descriptions.
Reflet is a set of tools for building https://github.com/day8/re-frame + React based web apps with graph and non-graph data models. This includes:
1. Entity references and their lifecycle management
2. Performant multi-model DB with graph queries and mutations
3. Simple but powerful hierarchical FSMs
4. JS and DOM interop utilities
5. Novel API-driven visual debugging of complex apps (don't sleep on this!)
Reflet aims to support all this with minimal integration into existing apps.
Hope it is helpful! :rightwards_hand: 🎁
https://github.com/zalky/reflet (edited)#2023-05-0121:26uochanJust released antq ver 2.4.1062 Tool to point out your outdated dependencies.
https://github.com/liquidz/antq
Added support for exclusion by specifying version ranges.
https://github.com/liquidz/antq/blob/main/doc/exclusions.adoc#specify-a-version-or-version-range-via-metadata#2023-05-0212:13jpmonettasHappy to share the release of FlowStorm 3.5.1 with a bunch of new features and bug fixes.
FlowStorm is a Clojure and ClojureScript repl companion which helps with debugging, value inspection, and more.
More remarkable for this release is the addition of Clojure threads breakpoints, which allow the user to block threads executions. This together with the new recordings controls, cover the cases where continuously recording everything is impractical (like in a game loop, HumbleUI applications, etc).
Also the def buttons in value inspectors now allows you to specify a namespace, so they can be used for repl debugging techniques like the one described https://www.cognitect.com/blog/2017/6/5/repl-debugging-no-stacktrace-required, for which people normally use inline defs.
If you are using it with the new ClojureStorm (recommended) you also need to upgrade it to "1.12.0-alpha3" or "1.11.1-2" depending on the version of Clojure you are using.
New Features
• Add threads breakpoints (https://jpmonettas.github.io/flow-storm-debugger/user_guide.html#_thread_breakpoints)
• Add "Highlight current frame" on the call tree tool
• Add stacktrace tab to the code stepping tool
• Add a result pane on the functions list tool
• Double click on calls tree tool node steps code
• Control recording start/stop from the UI
• Add basic keyboard support (https://jpmonettas.github.io/flow-storm-debugger/user_guide.html#_key_bindings)
• Allow DEF button functionality to specify a namespace
Changes
• Made search functionality faster and simplified it's code
• #rtrace automatically opens the code stepping tool in the last position
• Upgrade hansel to 0.1.54
• Signal error when trying to use #rtrace with ClojureStorm
Repo: https://github.com/jpmonettas/flow-storm-debugger
Users guide: https://jpmonettas.github.io/flow-storm-debugger/user_guide.html
Slack channel: #flow-storm#2023-05-0314:32opqdonut[metosin/reitit "0.7.0-alpha1"] is out!
This is a preview release with OpenAPI 3.1 support. Please test it and tell us if it works for you!
Blog post with more details: https://metosin.fi/blog/openapi3/#2023-05-0314:35p-himikHow timely. :) I am about to add an OpenAPI spec to an existing project of mine as was considering reitit for it.#2023-05-0316:03rickmoynihanahh amazing… Thank you! 🙇#2023-05-0315:45practicalli-johnhttps://github.com/practicalli/clojure-cli-config - user level aliases for Repl workflow and community tools to support development
Continuing with a refactor of the aliases, removing those that are not particularly relevant or have been replaced by others. All deprecated alias configurations are moved to deps-deprecated.edn in case they are useful (let me know if I have removed an alias you depend upon)
• Added
◦ :lib/component-repl and :lib/integrant-repl libraries for system component REPL workflow (Mount & Donut-part do not require additional libraries)
◦ :inspect/morse new in-process inspect tool (using the REBL JavaFX UI)
• Changed
◦ DEPRECATED: :lib/reloaded & :lib/tools-ns - use :dev/reloaded
◦ DEPRECATED: lib/nrepl little value without a :main-opts configuration
◦ DEPRECATED: :repl/rebel-cljs, :repl/figwheel, :repl/rebel-cljs requires JVM with Nashorn, i.e. Java 8 - use figwheel-main template and https://practical.li/spacemacs/clojure-repl/clojurescript-repl/
◦ docs: lib/hotload for Clojure 1.11 and uses [[https://github.com/clojure/tools.deps.alpha/tree/add-lib3][clojure/tools.deps.alpha]] which has been replaced for Clojure 1.12
◦ alias: remove clojure/tools.deps.alpha from :repl/reloaded & :dev/reloaded for use with Clojure 1.12
◦ remove find-deps from :repl/reloaded & :dev/reloaded as no longer required - use add-lib instead
◦ docs: update introduction and remove outdated content
◦ aliases: use --main option in alias :main-opts definitions for greater clarity
◦ alias: :repl/rebel load Clojure 1.12 hotload functions during REPL startup
• Updated
◦ ci: updated GitHub workflow and configuration to standand used in other Practicalli projects
◦ Update library versions using clojure -T:search/outdated - antq, flow-storm, zulip #2023-05-0316:04seancorfield@U05254DQM We try to encourage folks to keep #C06MAR553 to about once a month per project and post to #C015AL9QYH1 for more frequent project updates (you last posted about the CLI Config here last week). Thanks!#2023-05-0318:59practicalli-johnI usually post smaller releases in #C015AL9QYH1 but there were several deprecated aliases that people should be aware of this time#2023-05-0415:09borkdudeA new https://babashka.org/scittle/ release!
Execute Clojure(Script) directly from browser script tags via SCI!
This release comes with a new build system so you can create a scittle disbribution with your own favorite libraries: see https://github.com/babashka/scittle/blob/main/plugins/demo.
v0.6.15 (2023-05-04)
• #58: build system for creating scittle distribution with custom libraries. See https://github.com/babashka/scittle/blob/main/plugins/demo.
• Use window.location.hostname for WebSocket connection instead of hardcoding "localhost" (https://github.com/pyrmont)
• Upgrade sci.configs to "33bd51e53700b224b4cb5bda59eb21b62f962745"
• Update nREPL implementation: implement eldoc (`info`, lookup) (https://github.com/benjamin-asdf)
Join #C034FQN490E for discussion and feedback.#2023-05-0514:51mhjortReleased new version of clj-gatling. Clojure library for load testing stateful applications. https://github.com/mhjort/clj-gatling
Version 0.18.0 includes various bug fixes. Join #clj-gatling for discussion and feedback.#2023-05-0518:15Joshua SuskaloAnnouncing v1.5.0 of https://github.com/IGJoshua/farolero, an implementation of Common Lisp-style conditions and restarts for Clojure!
This version introduces support for using farolero in #babashka projects!
It also includes several bug fixes.
Come on over to #farolero to talk about usage!#2023-05-0716:13pezA new version of Calva is usually released several times a week. This week too, and today: https://github.com/BetterThanTomorrow/calva/releases/tag/v2.0.356
• https://github.com/BetterThanTomorrow/calva/issues/2180
• https://github.com/BetterThanTomorrow/calva/issues/1027
Which follows a trend lately on making Calva better to support various workflows. And also fixes a big and old problem with connecting shadow-cljs REPLs, where Calva hasn’t had a way to know when the ClojureScript app is started, so the cljs REPL just looked like it was there. This caused a lot of friction and confusion. Not so any longer!#2023-05-0716:16pezSee https://calva.io/customizing-jack-in-and-connect/ for details on the new workflow automation settings. Looking forward to know what @U04V70XH6 does with it. 😃#2023-05-0818:25Wernerhttps://github.com/wkok/openai-clojure v0.6.0 released
• Added support for Azure Chat Completions api
• Support passing the Azure :api-endpoint in options of each api function
#2023-05-0905:12seancorfieldorg.clojure/tools.cli {:mvn/version "1.0.219"} -- https://github.com/clojure/tools.cli -- Command-line processing:
• Add ClojureCLR support https://clojure.atlassian.net/browse/TCLI-102 @dmiller
Follow-up in #clr (or #clojure for general tools.cli Qs)#2023-05-0915:09djanusI’ve released version 0.3.5 of https://github.com/nathell/skyscraper, a framework for structurally scraping whole sites in Clojure. Get it from Clojars: {skyscraper/skyscraper {:mvn/version "0.3.5"}} .
Changes in this release:
• Feature: New function cached-document for accessing a previous (cached) version of a page downloaded while in update mode.
• Documentation: New example illustrating the use of a Redis cache backend. (Thanks to @patrick.glind, @skuro, @alvin.francis.dumalus, and Oskar Gewalli for contributing!)#2023-05-0915:53Eric Scotthttps://github.com/ont-app/vocabulary
v 0.3.0
• Adding Resource protocol with method resource-class
• Addding methods as-uri-string, as-kwi, as-qname dispatched on resource-class
• Adding and enforcing specs for uri strings, kwis, qnames, and namespace metadata
#2023-05-1101:32quantisanWe started designing the interface for Stepwise.Next and would love some community feedback. If you're using Stepwise, AWS Step Functions (or maybe Airflow, etc), or use Clojure to orchestrate workflows, I'd love to hear about your use cases and pain points. Please don't hesitate to reach out to me here or <mailto:/cdn-cgi/l/email-protection|/cdn-cgi/l/email-protection>
Here's my blog post outlining the problem we're trying to solve and a work-in-progress interface proposal. Apologies if this isn't the right channel! https://www.quantisan.com/simplifying-step-functions-and-stepwise-lessons-learned-and-a-new-approach/#2023-05-1102:58joshuamzLooks very interesting. I know you're building your tasks on top of AWS Step Functions, but are you planning to target different platforms? I'm interested in orchestrating work in Kubernetes, the Clojure way, but haven't invested much time and effort on that yet. Very cool to see more infrastructure tooling written and designed with the Clojure mindset.#2023-05-1103:00joshuamzAside from this tool, in your post you mentioned you're solely using Clojure for everything, dropping other technologies. I'm particularly interested in your replacement to Terraform. I've invested much time with that tool and I found it quite compelling. Did you write a Clojure layer on top of it? Or are you using a different approach for infrastructure management?#2023-05-1106:48quantisanGreat suggestion, @U02BATFPN78, about keeping the library platform-agnostic. We're currently using Step Functions and don't have plans to support other platforms at the moment. While I'm not very familiar with Kubernetes, my understanding is that Step Functions operates at a higher layer, closer to the business logic than the infrastructure. I'm curious, could you explain what you mean by orchestrating work in Kubernetes?
We're only using Stepwise.Next to replace Terraform for these state machines and associated assets, such as a couple of IAM roles and an S3 bucket. We'll continue using Terraform to manage the other 90% of our assets.
If you're interested in replacing Terraform with Clojure, you might want to check out https://github.com/hashicorp/terraform-cdk. They already support using Java to declare Terraform resources. Someone is likely already working on porting that to Clojure.#2023-05-1108:53IvanWhat is the reason to have run-here and run-on-lambda as fns rather than part of the configuration?
(sfn/run-here client
{make-sauce {:concurrency 5}
put-ingredients-on-dough {:concurrency 1}
bake {:concurrency 1}})
(sfn/run-on-lambda client
{make-dough {:timeout 30
:memory-size 512
:max-concurrency 100}})
I would expect something like
(defn make-dough ...
) ;; the steps
(def pizza-making-sm ...
) ;; the wiring / state machine
(def config {make-sauce {:platform :local :concurrency 5 ...}
bake {:platform :lambda ...}
) ;; the technical details / infra / config
(sfn/run config pizza-making-sm)
#2023-05-1108:55Ivan> SFN error handling configuration as metadata
this is interesting 🙂#2023-05-1114:55valtteriSounds interesting!! Have you considered “data driven” approach to describe the FSMs? I mean something similar what malli and reitit does? E.g.
[:sfn/name :pauls-pizza-making-machine
[:sfn/parallel
[[:fn make-dough :config {,,,}]
[:fn make-sauce :config {,,,}]]]
[:fn put-ingredients-on-dough :config {,,,}]
[:sfn/wait 2 :minutes]
[:sfn/choice
[:test-fn (comp not is-pizza-acceptable?)
[:sfn/fail]]]]
This would make it trivial to create and manipulate FSM definitions programmatically. Dev-time validation could be added as well#2023-05-1114:57valtteriNothing wrong with the DSL approach though. 🙂#2023-05-1122:52quantisan@U8ZE1VBSS, am I reading your intention correctly that using a configuration map with a single entry point would make a more consistent API and follow principle of configuration as data? It would also make extensions to additional platforms (as Joshua suggested above) trivial for the API, as it's just adding additional acceptable values for :platform key.
I chose run-* as fns because they are first-class operations of this API that produces a critical side effect. Saying it another way, the JAR that's meant to run on AWS Lambda should only spin up the Lambda workers. The JAR that runs in a container should only run the local processes. So we'd end up needing a separate interface between the different platforms.
Moreover, we found from Stepwise v1 that we often want to isolate our local workers into different containers. e.g. we currently put (run-here client urgent-workers) in one container, and (run-here client batch-workers) in another container. We do that with a -main with CLI actions that points to each (i.e. $ my-app start urgent-workers and $ my-app start batch-workers from command line).
Thoughts?#2023-05-1123:23quantisan@U6N4HSMFW, Stepwise v1 actually takes an EDN as a state machine definition. We deliberately moved away from that because it was hard to read the gist of a control flow apart from the configurations. Libraries like reitit are routing libraries designed to manage the intricacies at a single junction in a procedure. From readability perspective, they have benefit of not needing to deal with time and surfacing details is a benefit but for us was a cost.
The "aha" moment for this new interface was realizing that Clojure already has a fantastic procedural programming operation in -> and others. Therefore, we want the new interface to work as you would expect from ->.
One compromise we made involves ops like sfn/parallel and sfn/map, which are similar but not exactly the same as map and apply. We could hide them behind map and apply to make the interface more Clojure-like, but we chose not to because 1) they are not exactly the same ops, and 2) they produce a side effect. I could put more thought into making them "just work" with Clojure fns, though...#2023-05-1520:03phronmophobicEarlier this year, I wrote an ETL workflow in clojure that uses AWS Batch with spot instances. Stepwise seems really neat.
Any idea how to compare the pricing of using stepwise vs Batch+Spot instances? It seems like Stepwise is focused more on an incremental approach. Is that right? Does it also support batching and scheduling?#2023-05-1601:10quantisan@U7RJTCH6J workflows (AWS Step Functions) differ from ETL (AWS Batch) by that workflow is meant to be run many times but each execution is relatively small conceptually, e.g. make pizzas for customers. Whereas ETL is meant to process a big blob of a single thing but in many pieces, e.g. make me 1 ton of dough. So the two are not mutually exclusive. You can use SFN to coordinate Batch jobs (AWS provide built-in integrations of the two) as part of a larger workflow. e.g. a SFN workflow that runs BatchJob1 -> BatchJob2 -> Clojure Lambda Fn to cleanup meta data -> trigger SageMaker training -> ...#2023-07-0716:17Lyn HeadleyStepwise also supports processing large blobs of things in many pieces, correct? My understanding is that your worker functions can simply return regular maps which will get serialized to persistent storage if they are large, and can be broken up into chunks using the step functions map task type. All with a convenient clojure interface. Is that right? I am really impressed by this by the way and looking forward to the next version!#2023-07-0720:32quantisan@UDF1WUJTH that's correct! we have a feature to selectively/entirely offload the payload map to S3#2023-05-1109:49borkdudeBabashka https://github.com/babashka/fs: file system utility library for Clojure
v0.4.18 (2023-05-11)
• https://github.com/babashka/fs/issues/48: support input-stream in fs/copy
• https://github.com/babashka/fs/issues/91: add 1-arity to xdg-*-home to get subfolder of base directory (https://github.com/eval)
• https://github.com/babashka/fs/issues/94: updates to which: add :paths opt, allow absolute paths for program (https://github.com/lread)
#2023-05-1121:23borkdudehttps://github.com/babashka/process Clojure library for shelling out / spawning sub-processes
Version 0.5.19 released!
Changes since last announcement in December 2022 (v0.4.14)!
• https://github.com/babashka/process/issues/124: Allow :cmd to be passed in map argument
• https://github.com/babashka/process/issues/113: Support redirecting stderr to stdout (https://github.com/lread)
• https://github.com/babashka/process/issues/112: Support :pre-start-fn in exec
• https://github.com/babashka/process/issues/100: preserve single-quotes in double-quoted string
• Auto-load babashka.process.pprint if clojure.pprint was already loaded#2023-05-1210:09kuzmin_mhttps://github.com/darkleaf/di: DI is a dependency injection framework that allows you to define dependencies as cheaply as defining function arguments.
2.3.0
With di/env-parsing middleware, you can add env parsers. https://www.darkleaf.ru/di/test/darkleaf/di/tutorial/n_env_test.html.
(defn jetty
{::di/stop (memfn stop)}
[{port :env.long/PORT
handler `handler
:or {port 8080}}]
(jetty/run-jetty handler {:join? false
:port port}))
(di/start `jetty (di/env-parsing {:env.long parse-long}))#2023-05-1210:22mkvlrgreat to see the Clerk docs! If you have any feedback, please let us know in #C035GRLJEP8#2023-05-1210:43borkdudehttps://github.com/borkdude/deps.clj: a faithful port of the clojure CLI bash script to Clojure
This project now comes with an API for easier embedding in applications. Babashka is one such application, but #cursive will now also adopt it, which drove the creation of a more polished API so you can have more control over what happens during various phases of installation and process creation:
borkdude/deps.clj {:mvn/version "1.11.1.1273-3"}
See the API.md docs here: https://github.com/borkdude/deps.clj/blob/master/API.md
Also see these additional API notes: https://github.com/borkdude/deps.clj#api
Happy deps.clj-ing!
(require '[borkdude.deps :as deps])
user=> (deps/parse-cli-opts ["-M:foo:bar" "-m" "foo.bar"])
{:mode :main, :main-aliases ":foo:bar", :args ("-m" "foo.bar")}
Thanks to @cfleming for working on this with me.#2023-05-1216:47danielszI've published a https://www.youtube.com/watch?v=xIuJ0f1Vqek about the Meyvn REPL.
The Meyvn REPL supports Java and Kotlin codebases. Source files are being monitored and compiled automatically, so you can create a class in Java, import it in a Kotlin object, which you can then manipulate at the REPL in Clojure. It achieves this by doing static analysis not on source files but on compiled classes. By keeping a dependency graph, it knows which classes need to be reloaded and in what order. This technology is very useful in the context of teams inheriting legacy codebases, typically Java or Kotlin.#2023-05-1315:28Ludger SolbachOverarch (https://github.com/soulspace-org/overarch)
A data driven description of software architecture based on the C4 model.
Describe your model as data and specify/generate representations (e.g. diagrams) for your model. All core and supplementary C4 diagrams except code diagrams are supported.
Overarch is not so much about how to model your architecture (see https://c4model.com for that), but about making the models composable and reusable.#2023-05-1321:20Mario TrostThis looks cool, I hope to give it a spin clojure-spin
I really liked this talk from the Conj 2019, in case you don't know it yet: https://www.youtube.com/watch?v=HmHOYkTVxIg&list=PLZdCLR02grLqSy15ALLAZDU6LGpAJDrAQ&index=14
That's the first mention of C4 I had heard, but I wasn't a Clojure developer then (just watching talks...), so I only created C4 models with the Structurizr DSL and never with the https://github.com/FundingCircle/fc4-framework mentioned in the talk.#2023-05-1321:57Ludger SolbachI started this project after I've seen the fc4framework talk only 3 weeks ago. I've created quite a few C4 models directly in PlantUML before but PlantUML and the fc4framework mix models and views and don't lend themself to composability and reuse, IMHO. That's why I built something new.
Also the development of the fc4framework seems to have stalled after the conj talk 4 years ago. 😞#2023-05-1413:09practicalli-johnI used structurizr last year for the C4 models at a company, it was useful to start conversations with other teams regarding their services
I published a generalised version of the C4 model I created
https://practical.li/engineering-playbook/architecture/structurizr/
Would be nice to use Clojure to model the system though#2023-05-1507:26Ludger SolbachHello John,
that's at least the idea to model the system as data. It works fine, IMHO, with the PlantUML export and I've started with the export of structurizr workspaces. Also export of JSON files is implemented, for those who want to use the models outside of clojure.
At the moment, the description of the model and the views is a bit chatty and there is room for improvement. Element names could be generated from the ID for example and a default selection for views (like include *) would be nice.
I've written down some of my ideas in /doc/design.md, if you're interested.#2023-05-1507:33Ludger SolbachOne area that will require some thought is the specification of icons in a way that is compatible with the different rendering programs (e.g. PlantUML and structurizr). But with a bit of mapping, it should be manageable.#2023-05-1511:51practicalli-johnI've added a detailed look at overarch to my TODO list, thank you#2023-05-1315:29Ludger SolbachFeedback about the concept and the implementation is appreciated.#2023-05-1319:24borkdudeI was at first a bit hesitant to release this, but someone asked me to release it to clojars, so what the heck.
Introducing deps.add-lib, which brings the Clojure 1.12 add-lib feature to leiningen and/or other environments that don't have a specific version of the Clojure CLI installed!
https://github.com/borkdude/deps.add-lib
It works by invoking deps.clj (a re-implementation of the clojure CLI in Clojure itself) instead of shelling out to the installed version of the clojure CLI.
Usage:
(require '[borkdude.deps.add-lib :refer [add-lib]])
(add-lib 'medley/medley)
(require 'medley.core) ;; bingo
Hope it's useful to more than one or two people, so here you go :-)#2023-05-1420:29pezI created an example/starter project for ClojureCLR. It makes it easy to start an nREPL server in your ClojureCLR app, and connect your editor of choice to it. It’s Dockerized, and is using the new clr.tools.nrepl + some cheap tricks. I hope you all will try it out. ClojureCLR is super cool! https://github.com/PEZ/clojure-clr-starter#2023-05-1603:13pfeodrippehttps://github.com/pfeodrippe/recife 0.18.0 - A Clojure model checker (check the https://recife.pfeodrippe.com/)
• We are adding experimental support for Alloy (triggered by @taylor.jeremydavid)
◦ See https://github.com/pfeodrippe/recife/blob/master/test/recife/example/alloy/migration.clj
◦ REPL-focused
• You can combine Recife with a webdriver (see https://recife.pfeodrippe.com/notebooks/recife/notebook/webdriver.html)
• Other small improvements
Also, the #recife channel was created!#2023-05-1721:22Wernerhttps://github.com/htihospitality/re-dash 0.1.0 - A ClojureDart (re)framework for building user interfaces, leveraging Flutter
• Global central state management
• Pure views with no direct reference to global state
• Familiar api if coming from re-frame
• Supports events, effects & subscriptions
(not all re-frame functionality supported, but hopefully the most commonly used)
#clojuredart#2023-05-1811:02borkdudehttps://github.com/clj-kondo/clj-kondo: static analyzer and linter for Clojure code that sparks joy ✨
2023.05.18
• Linter :uninitialized-var moved from default :level :off to :warning
• https://github.com/clj-kondo/clj-kondo/issues/2065: new linter :equals-true: suggest using (true? x) over (= true x) (defaults to :level :off).
• https://github.com/clj-kondo/clj-kondo/issues/2066: new linters :plus-one and :minus-one: suggest using (inc x) over (+ x 1) (and similarly for dec and -, defaults to :level :off)
• https://github.com/clj-kondo/clj-kondo/issues/2051: consider :unresolved-namespace :exclude as already required namespaces
• https://github.com/clj-kondo/clj-kondo/issues/2056: validate collection nodes when constructing and --debug is true
• https://github.com/clj-kondo/clj-kondo/issues/2058: warn about #() and #"" in .edn files
• https://github.com/clj-kondo/clj-kondo/issues/2064: False positive when using :sha instead of :git/sha in combination with git url in deps.edn
• https://github.com/clj-kondo/clj-kondo/issues/2063: introduce new :defined-by->lint-as key which contains the :lint-as value for "defining" var, whereas :defined-as now always contains the name of the original "defining var". This is a BREAKING change.
• https://github.com/clj-kondo/clj-kondo/issues/1983: produce java-member-definition analysis for .java files.
• https://github.com/clj-kondo/clj-kondo/issues/2068: include :or default in :local-usages analysis
• https://github.com/clj-kondo/clj-kondo/issues/2079: analysis for data_readers.clj
• https://github.com/clj-kondo/clj-kondo/issues/2067: support :ns-groups to be used with :analyze-call and :macroexpand hooks
• https://github.com/clj-kondo/clj-kondo/issues/1918: ignore keyword bindings with namespaced in :keyword-binding linter
• https://github.com/clj-kondo/clj-kondo/issues/2073: :lint-as clj-kondo.lint-as/def-catch-all should ignore unresolved namespaces
• https://github.com/clj-kondo/clj-kondo/issues/2078: detect more :missing-test-assertion cases, e.g. (deftest foo (not (= 1 2)))
#2023-05-1817:44Mark WardleHermes https://github.com/wardle/hermes/releases/tag/v1.2.1190.... A Clojure open-source terminology server for healthcare. It's one of the core components of a working EPR here in UK... and now used worldwide I was pleased to hear. It's basically a thin wrapper around amazing Clojure, Java and C libraries that do all the hard work (e.g. core.match, instaparse, pedestal, Apache Lucene and LMDB).
Changes since last announcement here in April (v1.2.1080):
• Added support for automatically downloading releases from MLDS (the SNOMED International release service)
• Better progress reporting on downloading and import
• Improved HTTP server with better error messages and handling of empty responses, support for returning properties of concepts at the HTTP API level
• Added MRCM domain support to core API and HTTP API - this makes it easier to consume the SNOMED metadata model from application code
• Added better support for populating dropdowns and picklists with search results with search-concept-ids (I've used a prior version of this for pre-populating common terms in context of patient, diagnosis and clinical service before users have to start using autocompletion boxes in the user interface)
• Improved https://cljdoc.org/d/com.eldrix/hermes/1.2.1190/api/com.eldrix.hermes.core#pprint-properties, in detail and presentation [and now a working cljdoc build] including developer docs#2023-05-1913:45jpmonettasHappy to share the release of FlowStorm 3.6.0 with a bunch of new features and bug fixes.
FlowStorm is a debugger for Clojure and ClojureScript with some unique features.
Most remarkable changes are:
• a much improved, https://jpmonettas.github.io/flow-storm-debugger/user_guide.html#_value_inspector
• step over controls for prev and next with key bindings
• https://jpmonettas.github.io/flow-storm-debugger/user_guide.html#_locals for frame
• improved auto-scrolling when stepping on the code tool
• more than 2x pref improvement on ClojureStorm instrumented code execution and indexing
• reduced memory footprint for recordings
Important for people already using it :
There is one breaking change, if you were defining snapshot-value methods for your mutable values, now you need to https://jpmonettas.github.io/flow-storm-debugger/user_guide.html#_dealing_with_mutable_values.
If you are using it with ClojureStorm, you need the latest version, checkout the https://github.com/jpmonettas/flow-storm-debugger/#artifacts.
If you have any questions, please show up in #flow-storm
Repo: https://github.com/jpmonettas/flow-storm-debugger
Users guide: https://jpmonettas.github.io/flow-storm-debugger/user_guide.html
Cheers!#2023-05-1918:24borkdudeIs this the same project you announced on 2nd of May? If so, please announce it in #releases as this channel has a limit of once a month for the same project, see topic. Thank you!#2023-05-1918:24borkdudeFor now you can leave it but something to keep in mind for next time.#2023-05-2004:45mauricio.szaboHi, everybody: Pulsar Editor got a significant improvement on syntax highlighting - we just published (on the rolling release channel) a version where we basically redesigned tree-sitter! The new version is closer to other editor's and we now have Clojure being highlighted via tree-sitter (previously we only used TextMate for Clojure)! You can grab at https://pulsar-edit.dev - currently, we need to toggle the modern version because we don't want to break anything.
This is actually quite huge for me, at least, because this new implementation makes it possible do differentiate between function calls and lists; it is also possible (but still not implemented) to support both #_ and comment, highlighting it correctly to a code comment (but also allow the user to decide if that's desirable); and finally, because it opens the doors to newest Electron versions!#2023-05-2013:37pfeodrippeAí sim, papai!!#2023-05-2014:24Noah BogartThis is sick! Good job y’all#2023-05-2015:34niwinzHi everybody, I'm happy to announce a new major release of *promesa* library: 11.0.664.
The most relevant change behind this version is:
In this version, one of the problems that existed since the birth of this library has been
corrected, related to the fact that the default implementation of js/Promise makes it
impossible to nest promises . This fact has caused the library in the first place to have
had a divergence with its counterpart in CLJ/JVM and, secondly, to the fact that
mapcat-type operators could not be correctly implemented, making them practically
useless on CLJS until now.
With this version, the problem is fixed and while it cannot technically be considered a
backwards compatibility break, some operators with promises will not function
identically. Basically the magical auto-unwrapping of promises is gone in some operators.
Function docstrings have already been explicit about what they are expected to return, so
if you've been relying on the js/Promise implementation detail in CLJS, it's possible that
some pieces of code are broken, because now several operators already work the same way in
CLJ and CLJS.
Other relevant changes:
• CSP: add first class support for errors on channels
• Promise: add introspection support on CLJS (pending? done?, deref, ...)
• Exec: many improvements and fixes on vthreads support (already available in 10.x)
You can see a complete changelog here: https://github.com/funcool/promesa/blob/master/CHANGELOG.md#version-110664#2023-05-2017:00borkdude@U06B73YQJ curious as to how much overhead is introduced compared to using js/Promise directly and what the effect on performance is#2023-05-2022:25niwinzInteresting question, in our nonscientific tests the performance is analogous, but this is something that I still in my TODO list for measure it ...#2023-05-2115:24niwinz#2023-05-2115:25niwinzit has a lightweight overhead over native promise, but still looks reasonable for correctness#2023-05-2115:30niwinzThis on release build, for completeness#2023-05-2115:31borkdudeseems 50% slower?#2023-05-2115:32niwinz404ns vs 575ns#2023-05-2115:32borkdudeok 42% then :)#2023-05-2115:33borkdudeIn JS you can't "wait" for a promise unless you use async/await (which is just syntactic sugar for .then basically). What then is the semantics of deref of a promise in JS?#2023-05-2115:34borkdudeBtw, was the overhead similar to previous releases of promesa?#2023-05-2115:35niwinzthis measures only native Promise impl vs promesa builtin promise impl (without all promesa abstractions, just underlying impl)#2023-05-2115:37borkdudewould it be an idea to have a mode in which the promesa macros just compile to regular "bare" js/Promise without the extra baggage? I don't think I've ever wanted to reach for anything that wasn't possible with js/Promise alone, just that the macros offer a convenience#2023-05-2115:38niwinzyes, it is possible, but this will imply to have different versions of macros for clj and cljs, and the main reason for internally use protocols, is to have the same macro impl for CLJ and CLJS#2023-05-2115:39borkdudeyou can't block in JS. what does deref do when the value isn't available?#2023-05-2115:40niwinzthe deref is irelevant here, is just a side effect of being able to inspect the state#2023-05-2115:44niwinzyou can't block in JS. what does deref do when the value isn't available? => returns nil#2023-05-2115:47borkdudemaybe throwing would be better?#2023-05-2115:47borkdudesince nil might be a legit return value#2023-05-2115:49niwinzthis is why you have the state introspection predicates... you need to explicit check
but yes, throwing may be an option#2023-05-2115:50borkdudeok thanks for explaining the design choices#2023-05-2319:35mccraigmccraignesting and CSP error state are making my code simpler!#2023-05-2319:39mccraigmccraigfor deref/extract of cljs promise values i don't mind if the 1-arity throws on unfulfilled promises, as long as there is a 2-arity which lets you specify a distinguished unfulfilled value#2023-05-2223:28seancorfieldhttps://github.com/seancorfield/honeysql -- Turn Clojure data structures into SQL
2.4.1033:
• Tentative https://github.com/clojure/clojure-clr support.
• Improve on-conflict helper docstring https://github.com/seancorfield/honeysql/pull/490 https://github.com/holyjak.
Follow-up in #C66EM8D5H and/or #C060SFCPR#2023-05-2317:10mccraigmccraigHere's a first public release of A-frame, which started life as a backend port of #re-frame, for a business game-engine, and has since found multiple other uses:
https://github.com/yapsterapp/a-frame#2023-05-2317:41Noah Bogartoh hell yeah, i've thought about writing something like this!#2023-05-2317:48fengonce i thought i need a server side re-frame, it seems i got one soon#2023-05-2317:53Ben SlessDo you have a larger scale example? I'm trying to see how it'd look like in an application#2023-05-2318:08mccraigmccraig@UK0810AQ2 here's an API event:
https://gist.github.com/mccraigmccraig/fa2291513c424b2893d357c31735900e#file-identify_org_api-clj-L106
and here's a 'tick' event from that game engine:
https://gist.github.com/mccraigmccraig/58738262b223e9ff442a8a51582597fe#file-season_tick-clj-L238
(both of these are on an earlier version of the a-frame API, where events were always vectors - which leads to the specifications for the cofx args being awkward to read)#2023-05-2408:53ah45Finally 😜
Congrats @U0524B4UW on getting this out into the wild 🙌:skin-tone-2: This was a really interesting new framework for backend services that I think deserves much wider use and adoption—I’m excited to see where it goes now the community has access to it!#2023-05-2409:05mccraigmccraigthanks @U0K8D35BM - it took a while - there were quite a few ideas to develop! there are more still, and much more detail in documentation required (e.g. there is nothing in the docs about the existing dispatch-sync op and fx, and it badly needs a dispatch-sync cofx added), but i think it is usable now#2023-05-2503:11quollhttps://github.com/quoll/tiara: A tiny library for data structures.
This first public release contains ordered maps and ordered sets. This are immutable hashmaps and hashsets that record the insertion order, similarly to Java’s LinkedHashMap and LinkedHashSet.#2023-05-2505:34tomdHow do these differ from those implemented here: https://github.com/clj-commons/ordered and here:
https://github.com/frankiesardo/linked ?#2023-05-2514:46quollThere are 2 parts to my answer.
First, I was pretty sure that such functionality already existed, but given the scope of this project (very small!) I saw no harm in reimplementing this functionality. I learned something, which was my intent. When I was done, I figured it couldn’t hurt to put it out in the public domain. Also, I’m not great at finding other people’s projects, but I knew I could have just asked.
Second, I’ll address the technical differences. “Linked” implements both cljs and clj. I want to get to a cljs for Tiara, because it’s just rude when you find something useful only to learn that it won’t work on ClojureScript.
Also:
• Tiara uses ⅓ of the MapEntry objects that Linked uses.
• Linked has O(1) removals (`dissoc` for maps and disj for sets). Tiara has O(n) removals.
• Linked has sparse data after multiple removals, and has introduced an extra compact operation to repack the data. This is a single O(n) operation that makes up for Tiara’s O(n) removals. Tiara is always compact.
There are fewer steps in the most common Tiara operations (`assoc` and get), so they may be a little quicker, though I will need to use Criterium to check. However, Tiara is using a proxy which could be slower. I could have used records or a proxy, but decided to try proxies, because I hadn’t ever made anything larger with a proxy before. If proxies turn out to be slower (I suspect they are), then I should change it back to a record, which is what I usually use anyway. Most of the code won’t change.#2023-05-2601:22tomd@U051N6TTC that's an excellent answer, thank you. If you'd like to add any of that to Tiara's readme, I'm sure many would appreciate it. I love libs that explain how they compare to similar. 🙏#2023-05-2601:45quollThanks for the comment. 🙂
I will consider a copy/paste when I’m back on the project again (I am working on SO MANY other things right now)#2023-05-2603:56quollJust looking now…#2023-05-2604:02quollI ran a simple criterium test, inserting 10000 key/values (number to number), then looking up all the keys to add the values.
(into (l/map) (map (fn [n] [n n]) (range 10000))
Then I reduced over the range to lookup and add the value.
Tiara right now takes nearly 5 times as long. So I tried changing out the proxy for a deftype. It took a little work, but the functions were basically the same. Now it’s more than twice as fast!
Lesson learned… don’t use proxies 😄#2023-05-2604:03quollI’ve only updated the map for now, but I’ll do the set as well and push a new release#2023-05-2607:05xificurChttps://github.com/redplanetlabs/proxy-plus has some explanation why clojure's proxy is slow#2023-05-2613:23quollI recall something about it from a long time back, but thought it would be an interesting exercise to use it, given that I don’t think I’ve touched it in 10 years.#2023-05-2613:27quollOne nice feature is that it lets you inherit from an abstract class, which deftype won’t allow. AbstractSet does almost everything for you, which is means that an proxy or genclass approach is only a few lines#2023-05-2513:12sansarip🎉 🦉 🐻
First official release of https://marketplace.visualstudio.com/items?itemName=sansarip.owlbear, a VS Code extension to support paredit-like structural editing for HTML, TSX, TS, JSX, JS -largely built with ClojureScript!#2023-05-2513:13sansaripUnfortunately, two of my previous jobs moved away from ClojureScript to TypeScript, and I don’t even work with CLJS at my current job anymore 😢 Anyway, I was getting really tired of wrangling HTML and JSX tags, so I thought I’d do my best to port over some paredit goodness.
Owlbear doesn’t provide any sort of integrated REPL experience, but I hope the extension at least alleviates some of the pain of working in mainstream web development.
I haven’t advertised Owlbear to the greater web dev community yet, but my pie-in-the-sky goal with this extension/experiment is to hopefully bring more folks onboard to this style of editing. I’m not aiming for Owlbear to be the perfect implementation of paredit outside of LISPs, but rather just helpful enough to inspire folks to build similar tooling for other languages/editors (or an even better extension for the same languages haha). VS Code has a pretty massive community of JS web devs, which is why I’m focusing on that editor first.
This extension was heavily inspired by Calva :heart_hands:#2023-05-2513:56sansaripAh darn, rookie mistake, should’ve tested Owlbear on other OS’s/architectures facepalm sorry folks, gonna have to cook up some fixes later.#2023-05-2514:18Tomas BrejlaDon't worry. Judging from the videos, It's looking great. Looking forward to test working linux version 🤞
Btw does the extension kick in also on .json files? (extension description mentions HTML, TypeScript, TypeScript-React, JavaScript, and JavaScript-React , not sure if that includes json#2023-05-2514:28pezTaking this for a spin R I G H T N O W ! Been needing it for so long.#2023-05-2514:32sansarip@U01LFP3LA6P JSON is not officially supported; have to think through what that would look like a bit -def doable! For the time being, you may have limited success by changing the language mode in a JSON file to JavaScript (`cmd+shift+p` then search Change Language Mode).#2023-05-2516:21flowthinghttps://github.com/eerohele/pipehat 1.0.0: a (zero-dependency) Clojure library for reading and writing HL7v2 messages encoded using vertical bar encoding.#2023-05-2518:49dharriganThat is pretty apt since I work with hl7 messages too!#2023-05-2605:22flowthingCool! Happy to hear any feedback you might have if you decide to give it a spin. 🙂#2023-05-2523:17nnicholsThe https://github.com/nnichols/clojure-dependency-update-action is now released at https://github.com/nnichols/clojure-dependency-update-action/releases/tag/v5.
The largest user facing change were some improvements to log grouping that should make diagnosing temporal/artifact-specific errors easier.
With that said, https://github.com/renovatebot/renovates clojure support is really solid at this point- and I've begun transitioning my personal projects, and the projects in the Wall Brew org, to use the Renovate GitHub App. I will keep the lights on for this action, but as I won't be using it day-to-day, new features are unlikely.
Also, https://github.com/nnichols/clojure-dependency-update-action: The https://github.com/nnichols/leiningen-dependency-update-action is now fully deprecated and archived. I was unable to find any active repositories which had not already transitioned to the clojure- action or another tool. For posterity, the clojure- action works on all major clojure dependency management tools.#2023-05-2616:15delaguardoNew release of https://github.com/DeLaGuardo/setup-clojure/releases/tag/11.0
This version brings yet another tool to the setup-clojure utility belt - cljfmt (Thanks @weavejester for contributing)#2023-05-2623:20quollAn updated of https://github.com/quoll/tiara to 0.2.1.
This has been updated to a much more efficient implementation, and the README has been updated to compare to https://github.com/clj-commons/ordered and https://github.com/frankiesardo/linked, which are two similar libraries. (thanks to a request from @tomd)#2023-05-2708:37tomdThis is awesome! Great work. Especially the benchmarks. Super helpful for choosing between them.#2023-05-2711:58borkdudeIt'd be great if some of these improvements could be backported to the clj-commons one too, since some libs are using that one (clj-yaml) and it's being used and exposed in bb too. I'd love to have you as a maintainer in that project, if you were interested#2023-05-2714:51quollI’ve really put my foot in this, haven’t I?#2023-05-2714:51quollYes, I could take that on#2023-05-2714:53borkdudeawesome :-D#2023-05-2809:56borkdudehttps://github.com/babashka/babashka: Native, fast starting Clojure interpreter for scripting
Monthly maintenance release!
Reminder: https://babashka.org/conf/ is happening June 10th in Berlin. Only 6 tickets left!
1.3.180 (2023-05-28)
• https://github.com/babashka/babashka/issues/1524: Remove dynamic builds for linux-aarch64 (https://github.com/lispyclouds)
• https://github.com/babashka/babashka/issues/1557: Add support for babashka.process/exec after namespace reload of babashka.process (https://github.com/lread)
• https://github.com/babashka/babashka/issues/1548: shell and sh should respect babashka.process/*defaults*
• https://github.com/babashka/babashka/issues/1524: deprecate (remove) linux-aarch64 dynamic binary build
• Expose org.graalvm.nativeimage.ProcessProperties/exec
• Bump babashka.http-client to 0.3.11
• Bump babashka.fs to 0.4.19
• Bump babashka.process to 0.5.21
Join the discussion in #CLX41ASCS#2023-05-2902:52diego.videcoHello everyone, just wanted to share a TidalCycles port (from Haskell) that I’ve been working on. TidalCycles is a pattern based live coding environment for music (although patterning other things is possible too).
The port is still a work in progress, as only about 10% of the API is covered, but I plan to continue working on it. PRs welcome github-light!
However it is usable so if anyone is interested in trying it I’ve tried to document the repo as best as I could (installation and tooling wise). But feel free to DM me with any questions.
Demo: https://www.youtube.com/watch?v=7qNSjhMf_HU (Sound quality is not the best, clipped at some points and it’s not mastered, but seems good with headphones).
https://github.com/diegovdc/piratidal/
PS: forgive me for crossposting this on the #overtone channel.#2023-06-0204:15mauricio.szaboWow, interesting - I believe one of the authors of TidalCycles was helping us on the #C054YJBPBJ6 discord to debug our backend and publish their plug-in to the editor!#2023-06-0218:59diego.videcoYeah, they and the Hydra community were very keen on Atom, which actually worked great as live coding environment.#2023-05-2920:10dangercoderpotion- Your enchanting companion for Clojure-CLR. This magical tool streamlines your programming journey, making Clojure-CLR effortlessly accessible and remarkably efficient. Experience the alchemy of code with Potion!
• Loads all your dependencies specified in .csproj - no more manually loading Assemblies!
• potion repl -- starts an nrepl server
• potion test -- runs all tests in the test directory
⚠️ Early days - May not work on OSX, Windows - only tested on Linux, requires .NET 3.1 or higher. Bugs expected.
#clr
https://github.com/Dangercoder/potion#2023-05-3011:09joakimenhttps://github.com/joakimen/fzf.clj: A small, data-driven and babashka-compatible wrapper around fzf#2023-05-3013:24joost-diepenmaathttps://git.sr.ht/~jomco/openapi-tools/ — pure clojure, babashka-compatible functions for dealing with OpenAPI / JSON Schema documents (includes request/response validator). This is the first SNAPSHOT release while we work on additional tooling.#2023-05-3119:36mccraigmccraigslip - a fully async compatible clj+cljs IOC micro-library
https://github.com/yapsterapp/slip#2023-05-3120:32Alex Miller (Clojure team)https://github.com/clojure/tools.gitlibs 2.5.197 - API for retrieving, caching, and programatically accessing git libraries
• https://clojure.atlassian.net/browse/TDEPS-248 - Make tags return known tags when offline#2023-05-3120:32Alex Miller (Clojure team)https://github.com/clojure/tools.deps 0.18.1354 - Deps as data and classpath generation
• https://clojure.atlassian.net/browse/TDEPS-247 - Fix StackOverflow on deps with big fan-out
• https://clojure.atlassian.net/browse/TDEPS-249 - Properly push/pop thread bindings during dep expansion
• https://clojure.atlassian.net/browse/TDEPS-227 - Shut down dep expansion threads at end of resolve-deps
• Update to tools.gitlibs 2.5.197
• Update to tools.deps.cli 0.9.43 for -X:deps#2023-05-3121:03Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.11.1.1347 is now available
• With -X or -T accept - as a trailing argument to read the remainder of args from stdin
• On windows installer, hide progress bar on download
• https://clojure.atlassian.net/browse/TDEPS-247 - Fix StackOverflow on deps with big fan-out
• https://clojure.atlassian.net/browse/TDEPS-249 - Properly push/pop thread bindings during dep expansion
• https://clojure.atlassian.net/browse/TDEPS-227 - Shut down dep expansion threads at end of resolve-deps
• https://clojure.atlassian.net/browse/TDEPS-248 - Make tags return known tags when offline#2023-05-3121:24seancorfield> With -X or -T accept - as a trailing argument to read the remainder of args from stdin
This is prep for fixing the add-libs stuff with large dep trees, in 1.12 Alpha 4?#2023-05-3121:30Alex Miller (Clojure team)yes#2023-06-0101:57quollhttps://github.com/quoll/michelangelo: a tool for transforming Turtle files.
This library uses https://github.com/quoll/raphael and https://github.com/quoll/donatello to load Turtle files, modify them, and write them back out with your changes.
• The graph to modify is presented as a simple nested map.
• @base and @prefix directives can be modified, but are automatically preserved if ignored.
• Triples maintain ordering.#2023-06-0102:01craftybonessplinter sounds like a great name for the library too, just saying 😄#2023-06-0102:06quollThat’s a Rat, not a turtle 🐀 🐢#2023-06-0102:09quollI have not yet determined what other tools I need for working with these files, but when I do, then it’s clear what I need to name them#2023-06-0102:09quoll(Answer: Yertle)#2023-06-0103:32johnSplurtle. The turtle splinter#2023-06-0103:33johnAnd they say naming things is hard, psh#2023-06-0103:35quollIf I’m not doing TMNT then I’m definitely doing Dr Seuss#2023-06-0103:37johnobject fish, word fish, subject fish, verb fish#2023-06-0103:38johnTriples don't make great limericks#2023-06-0105:09quollThere once was a triple of phenology,
That professed to assert on biology,
Its supposed maxim
Linked a metanym,
That’s not how you build an ontology#2023-06-0519:55rafaeldelboniI think this name is perfect because, there is a line of succession between Michelangelo and Donatello as Donatello is the mentor of Michelangelo's mentor. (Bertoldo di Giovanni)
https://en.wikipedia.org/wiki/Donatello#Vasari's_Life#2023-06-0519:57rafaeldelboniSince is not from TMNT is a meta ref hehehe#2023-06-0604:11quollI enjoy the juxtaposition of the classical and modern absurdity in TMNT. That said, it’s a shame that Renaissance art does not figure as highly with me as other periods. I’d gladly bring in my favorites if I could (alas, my favorites tend towards the Impressionists)#2023-06-0618:53rafaeldelboniMe too, when we will have libs with names like Monet or Cassatt? 😆#2023-06-0918:06quollI’ll probably start with Renoir (my favorite) 🙂#2023-06-0109:01practicalli-johnhttps://github.com/oxsecurity/megalinter/releases/tag/v7.0.2
• cljstyle Clojure format tool added
• clj-kondo updated to latest version (automatic pick up latest version)
MegaLinter is a large suite of formant and lint tools for programming languages and configuration files, using docker images (flavor) to negate the need for installing tools locally. MegaLinter is also available via a GitHub action.
https://practical.li/engineering-playbook/code-quality/megalinter/#2023-06-0205:22practicalli-johnI am also considering adding zprint support for Clojure formatting#2023-06-0314:06practicalli-johnThere is a small bug in the 7.0.4 release for the cljstyle tool, which is already fixed in the beta version.
So in the GitHub workflow, use the beta version - I also recommend the java flavor for Clojure projects for a smaller, more specific docker image
# MegaLinter Configuration
- name: MegaLinter Run
id: ml
## latest release of major version
uses: oxsecurity/megalinter/flavors/java@beta
The beta version can also be used when running MegaLinter locally, e.g.
npx mega-linter-runner --flavor java --release beta --env "'MEGALINTER_CONFIG=.github/config/megalinter.yaml'" --remove-container
This command requires node.js installed locally#2023-06-0114:22eval2020v0.5.0 of https://github.com/eval/deps-try#installation, a tool to quickly try libraries on rebel-readline.
Changes:
• Support local projects as dependency.
◦ e.g. deps-try . ~/some/project ../some/other/project
• Better parsing of deps.
◦ check existance of deps and versions beforehand (online or offline).
▪︎ This fixes ambiguity between com.github.user/project being a mvn, git or even local dependency. All are now considered.
▪︎ print helpful error message otherwise.
• Use Clojure v.1.12.0-alpha3.
• Add FAQ and rationale to README.
#2023-06-0205:21practicalli-johnhttps://github.com/AstroNvim/astrocommunity/ now has a https://github.com/AstroNvim/astrocommunity/tree/main/lua/astrocommunity/pack/clojure, providing
• https://github.com/Olical/conjure plugin for Clojure REPL workflow (and many other languages)
• Clojure LSP for static analysis diagnostics and code actions (disabled for Conjure log)
• Treesitter Clojure language parser
• Parinfer for parents wrangling
AstroNvin 3.17.0 now includes a default localeader , to support Conjure key mappings
https://astronvim.com/ is a Lua community configuration for Neovim, providing a rich user experience, a separate user configuration, Neovim 0.9 support, Lazy plugin manager, Mason tool manager (LSP servers, format & Lint tools) and Telescope selectors. AstroCommunity extends AstroNvim with a wider range of packages, including language packs (code & config).
https://github.com/practicalli/astronvim-config extends the AstroNvim user config example, providing a quick way to have Clojure REPL workflow tools, Git & GitHub code/issue/pr management, multi-cursor editing, noice command pop dialogues, a range of theme variants and zen mode for distraction free editing.
Thank you to @rahul080327 and the AstroNvim maintainers for helping me create the Clojure language support and @olical for the excellent https://github.com/Olical/conjure (and supporting projects)#2023-06-0304:45caioJust started a Clojure plugin for Nx (a monorepo build tool). Very early stage, but suggestions are welcome 🙂
https://github.com/nx-clj/nx-clj#2023-06-0304:47caiohttps://github.com/nx-clj/nx-clj-playground And here's an example repo using the plugin!#2023-06-0421:01pezI’ve updated my example #cljsrn project, which uses #shadow-cljs, React Native, #reagent, and #re-frame to also use React Navigation. It turned out to be quite trivial, but I noticed it could fail in all sorts of ways anyway, so figured it makes sense to have a basic setup for it in an example. The project dependencies are also updated to latest everything, except react-native-web, where I needed to use a slightly older version. https://github.com/PEZ/rn-rf-shadow#2023-06-0516:13Lennart BuitThe hamming distance to rm -rf shadow is surprisingly low#2023-07-2021:29Kent BullThank you @U0ETXRFEW! I’m using your template and it is very helpful.#2023-07-2021:30Kent Bull@UDF11HLKC are you referring to removing shadowcljs?#2023-07-2107:00Lennart BuitI was just joking — imagining typing it wrong and removing shadow#2023-06-0503:37AbhinavNew https://github.com/AbhinavOmprakash/snitch release version 0.1.14.
Snitch has macros that injects inline defs in your functions, multimethods, let forms, and lambda functions. This enables a repl-based, editor-agnostic, clojure and clojurescript debugging workflow. It is inline-defs on steroids.
Changes
• Lambda fns inside defn , let and fn form also get inline deffed now (this wasn't the case earlier)
• Snitch macros preserve Metadata.
Shoutout to @brandon.ringe who helped a lot with testing this release and working with me through a lot of bugs.
Suggestions, feature requests, and bug reports are always welcome 🙂
Thanks to everyone who uses snitch ❤️
you can get the new release at https://clojars.org/org.clojars.abhinav/snitch#2023-06-0505:41anonimitorafI love snitch! I use it on the daily. I have noticed that it doesn’t work with https://github.com/Engelberg/better-cond (which I somewhat expected). Does it feel feasible to support better-cond? Happy to help if I can#2023-06-0505:48Abhinav@UR37CBF8D hey, I'm glad you like snitch. which version are you using, could you try the latest version and see if it better-cond works with it. if not could you share an example of what does not work?#2023-06-0505:49anonimitorafCool, I’ll send those details through in 2 hours or so#2023-06-0512:01borkdudeIt would be nice if you could post the tagline of your library in the announcement so it's immediately clear what the project is about#2023-06-0515:41Abhinav@U04V15CAJ thanks for the suggestion. I've added the description.#2023-06-0602:47anonimitorafSorry this slipped my mind @U02CVMEFEUF!
I did get to try something out just now using ver 0.1.14)
(def a 22)
(defn* f [x] (inc x))
;; x => 22
(better/cond
(odd? a) 1
let [b (f a)]
b)
;; => 23
Works fine, although I can’t recall what my actual use case was. It’s been a long time since I tried to use better-cond but will message you when it comes back to me!#2023-06-0705:02Abhinav@UR37CBF8D better-cond wouldn't have worked in versions before 0.1.13. maybe you were using an older version?#2023-06-0721:52anonimitorafHi @U02CVMEFEUF, just checked again (with 0.1.14), code snippet above works fine.#2023-06-1809:26Lari SaukkonenI just came to say that I’m a big fan of snitch!#2023-06-1815:51Abhinav@U01TATEPSG4 that means a lot, thanks very much ❤️ #2023-06-0715:29mhjortTrombi version 1.0 is out! https://github.com/mhjort/trombi
This is a load testing tool for testing stateful applications. The original name of the tool was clj-gatling and the project started as a Gatling wrapper about nine years ago. Since then the tool has evolved quite a lot and now Gatling is only an optional dependency when you want to see graphical reports. Therefore the name was changed to reflect the reality!#2023-07-2021:30Kent Bullawesome, nice work. I needed one of these tools.#2023-06-0916:08Joshua Smockcljest version 1.1.0 is out! This release is primarily bugfixes and minor improvements:
• Jest matchers now generate cleaner code, and it’s easier for users to define their own using the defmatcher macro.
• Negated matchers are fixed and work as expected.
• setup-mocks works as expected and recreates mocks for each test case.
• await-ed let bindings inside of async now work as expected.
There are no breaking changes so upgrading to 1.1.0 should be as simple as updating versions. Please reach out on #C0557K86C5P if you have any questions, issues, or want to get started with cljest! 🙂#2023-06-1114:36qrtI have created https://github.com/qrthey/clerk-tap, available on https://clojars.org/org.clojars.qrthey/clerk-tap. Clerk-Tap is small library that visualizes tapped values with Nextjournal's clerk library.
edit: as Sam has pointed out, clerk has built-in tap inspector functionality. The linked repository can be regarded as another showcasing of how easy it is to use clerk.#2023-06-1115:00Sam RitchieNice! Curious how this compares to the built in tap support? https://github.com/nextjournal/clerk/blob/main/src/nextjournal/clerk/tap.clj#2023-06-1115:02Sam Ritchiehttps://github.com/nextjournal/clerk/blob/add04581ad0e869941461896539a459b25de1d91/CHANGELOG.md?plain=1#L373-L374#2023-06-1115:02Sam Ritchiethis might be a case of “clerk needs a docs update”#2023-06-1115:17qrtI think you are right!#2023-06-1115:21qrtThe built-in one also looks better 😉#2023-06-1115:36Sam Ritchie@U05CNMYPQ2C I haven’t looked closely at either piece of code but maybe there are some improvements you could push upstream!#2023-06-1116:52qrtI doubt it, what I made is very simple. I didn't know about useful built-in notebooks with functionality in the clerk library. I had repeated some code across projects in a user.clj file and wanted to avoid this duplication by depending on an artifact.#2023-06-1218:32hlshipio.pedestal/pedestal-* 0.6.0
Pedestal is a set of Clojure libraries that bring the core Clojure principles - Simplicity, Power, and Focus - to server-side development.
https://github.com/pedestal/pedestal
Significant changes:
• Improvements to documentation
• Update dependencies to address known CVEs
This release includes some minor breaking changes so please review the https://github.com/pedestal/pedestal/blob/master/CHANGELOG.md#060---12-jun-2023 carefully.#2023-06-1219:15EugenChcking release page does not list the latest release. https://github.com/pedestal/pedestal/releases .
Maybe this should be updated / removed to avoid confusion#2023-06-1222:37hlshipI've updated it; I've not used this release page in any of my other GitHub projects, I just maintain a CHANGES.md file. But there's a history of doing so, which I'm carrying on, after a fashion.#2023-06-1307:26Eugenthanks#2023-06-1311:33EugenFor those of you who do DevOps using #CLX41ASCS and #C03S1KBA2 , you can now connect to remote unix sockets (#docker endpoint) secured with ssh.
Use the latest release of #bbssh https://github.com/epiccastle/bbssh/releases/tag/v0.5.0 .
See a guide here https://github.com/lispyclouds/contajners/blob/main/doc/002-general-guidelines.md#connect-to-docker-socket-on-remote-hosts .
Thanks to @retrogradeorbit, @rahul080327 and of course @borkdude 🙂 .#2023-06-1313:49mkvlr👁️ Clerk – Moldable Live Programming for Clojure io.github.nextjournal/clerk {:mvn/version "0.14.919"} has been released . ✨
Notable improvements in this release:
• 💈 Show execution progress: To see what’s going on while waiting for a long-running computation, Clerk will now show an execution status bar on the top.
• 🔗 Interactive Links, Index and Homepage: Links can now be followed in interactive mode and the index can be viewed. Previously this could only be seen after a build!. Add support evaluating a given doc by entering it in the browser’s address bar.
• ⚡️ *Speed up analysis of gitlib*s using git sha, resolve protocol methods
• 🍕 Add for splicing a seq of values into the document as if it were produced by results of individual cells
• 🚰 Improve Tap Inspector to support customizing of :nextjournal.clerk/width and :nextjournal.clerk/budget for individual tapped values and fix re-rendering
• 🍒 Add support for cherry as an alternative to sci to evaluate :render-fns, see https://book.clerk.vision/#evaluator
• :rainbow-flag: Polyglot syntax highlighting for code listings in all https://github.com/codemirror/language-data (https://github.com/nextjournal/clerk/issues/500).
And much more, get all details in the:wood: https://github.com/nextjournal/clerk/blob/e0030c63e79b0b75080afde67de21e5189e8b101/CHANGELOG.md#014919-2023-06-13, find the release on 📦 https://clojars.org/io.github.nextjournal/clerk, read the 📖 https://book.clerk.vision, follow-up in #clerk.#2023-06-1316:21jpmonettasJust uploaded a version of CiderStorm, which is an Emacs Cider front-end for the FlowStorm debugger with support for Clojure and ClojureScript.
I have been experimenting with editors integrations for FlowStorm. Started with Emacs but porting CiderStorm to other editors shouldn't be hard.
Here are some basic instructions https://github.com/jpmonettas/cider-storm to set it up.
Please take a look at the video to have an idea of what you will get.
Editors can use this nrepl middleware https://github.com/jpmonettas/flow-storm-debugger/blob/master/src-inst/flow_storm/nrepl/middleware.clj#L199-L275 to communicate with FlowStorm as CiderStorm is doing.
Let me know if anybody is interested in porting this to some other editor and I can help.
Cheers!#2023-06-1319:53pesterhazyhttps://clojurians.slack.com/archives/CLX41ASCS/p1686685970226459#2023-06-1509:25Wernerhttps://github.com/htihospitality/re-dash v0.2.0 - A ClojureDart (re)framework for building user interfaces, leveraging Flutter
Thanks to @vale v0.2.0 includes better subscriptions support:
• signals (layer 3 - materialised views as per https://day8.github.io/re-frame/subscriptions/#the-four-layers)
• shorthand syntactic sugar
#2023-06-1620:54dchelimskyhttps://clojurians.slack.com/archives/C015AL9QYH1/p1686948771363229#2023-06-1622:14uochanJust released antq ver 2.5.1089 Tool to point out your outdated dependencies.
https://github.com/liquidz/antq
Added "--transitive" option to scan outdated transitive dependencies ☺️#2023-06-1622:17Robson Filhocrossposting from the #datomic :
Datomic Cloud is now free! datomiccatjam
https://blog.datomic.com/2023/06/datomic-cloud-is-free.html#2023-06-1707:49Žygimantas MedelisBosquet - LLM lib v0.3.0 release https://github.com/zmedelis/bosquet/
• ReAct agent support - https://github.com/zmedelis/bosquet/#agents ⛳
• Wikipedia tool for agent use 🧰
• Splitting large contexts (thanks @carsten.behring) :men-with-bunny-ears-partying:
• Deployment to Clojars io.github.zmedelis/bosquet {:mvn/version "0.3.0"}#2023-06-1714:42Wernerhttps://github.com/wkok/openai-clojure v0.7.0 - Clojure functions to drive the OpenAI API
• Added support for OpenAI API v1.3.0 which includes functions#2023-06-1905:38licht1steinbabashka.el v1.0.3 - a simple Emacs interface for babashka tasks
https://github.com/licht1stein/babashka.el#2023-06-2118:44genmeblogThe King!
There are not too many games written in Clojure. so I (re)wrote one. Originally I've created it for some fantasy console (pico-8 here) http://itch.io jam (links in readme). Game is simple but may be demanding. Call to play:
clj -Sdeps '{:deps {io.github.Clojure2D/clojure2d-examples {:git/sha "de93d39e9ef43e269d14381f066c85de7207dab7"}}}' -X games.the-king.the-king/run-game
Controls: z/x and arrows
Source and more info: https://github.com/Clojure2D/clojure2d-examples/tree/master/src/games/the_king#2023-06-2119:00pezExciting! However, I get this when trying it:
Cloning:
Checking out: at e7d3fa73bab1bc3e27dba30f2b5b7b40b5622ef1
Downloading: sicmutils/sicmutils/0.22.0/sicmutils-0.22.0.pom from clojars
...
Downloading: org/bytedeco/openblas/0.3.10-1.5.4/openblas-0.3.10-1.5.4-windows-x86.jar from central
Execution error (FileNotFoundException) at java.io.FileInputStream/open0 (FileInputStream.java:-2).
src/games/the_king/font/pico-8-mono-reversed.ttf (No such file or directory)
#2023-06-2119:01genmeblogwut?!#2023-06-2119:01genmebloglet me check it...#2023-06-2119:35genmeblogFonts moved to the resources, sha updated, should work on every platform (I hope) now.#2023-06-2119:40jpmonettasgreat! works fine for me now!#2023-06-2120:17Arthur Füchercc: @U02DULD58G7#2023-06-2121:45Lucas TelesVery nice,
I played a bit using ClojureCLR and MonoGame https://github.com/lucasteles/monogame-clojure-hotreload/tree/flappy-bird, very nice experience#2023-06-2206:57vemvRunning the command failed for me with:
Syntax error (UnsupportedOperationException) compiling at (fastmath/kernel.clj:866:1).
Can't type hint a primitive local
#2023-06-2207:01genmeblogThanks. Which version of Clojure? I'm chasing such hints.#2023-06-2207:05genmeblogAlso, can you verify fastmath version you have on classpath, please? kernel.clj is less than 800 loc#2023-06-2207:10vemvthis should answer both qs, hope it helps! https://gist.github.com/vemv/03feb87a603350512e5fa8a53b72a007#2023-06-2207:12vemvit also can help to run Eastwood with :boxed-math and :performance linters enabled (they're disabled by default) in a CI matrix (different jvms, clojures). Since it essentially runs the Clojure compiler, you should get the very same errors.
Here's a fresh example of all of that https://github.com/clojure-emacs/logjam/commit/b3e7d8943d98abd15c81c7371cbcac048a684c93#2023-06-2207:16genmeblogGreat, I'll take a look at this tomorrow. Usually I compile everything but against current Clojure version. Tolerance for primitive hinting changed a couple of times as I observed.#2023-06-2313:53genmeblog@U45T93RA6 there is a problem indeed (tricky one) with the Clojure 1.10.3, 1.11.1 works, so until I fix it play the game on the latest Clojure 🙂 And eastwood is really cool (I used it in the past but stopped for unknown reason)#2023-06-2313:58vemvYeah... probably I'm running an old clojure cli? But that shouldn't matter given this declaration https://github.com/Clojure2D/clojure2d-examples/blob/3f1564897d4cd62b232c94643555dfd068a39c31/deps.edn#L2
Eastwood often failed to run in a given project a few years ago. It's gotten an strengthening + misc features since#2023-06-2314:00genmeblogYour setup replaces clojure2d-examples version. Local deps take the precedence.#2023-06-2521:06zaneThis is great, @U1EP3BZ3Q! Nice work.#2023-06-2200:04Eric Scotthttps://github.com/ont-app/vocabulary
Among other things this has a new feature to encode RDF-style tagged literals:
> (voc/tag (short 42))
#voc/dstr "42^^xsd:short"
> (voc/untag #voc/dstr "42^^xsd:short")
42
> (type *1)
java.lang.Short
> (voc/tag 2.2 :unit/Meter)
#voc/dstr "2.2^^unit:Meter"
> (defn meters-to-feet [m] (* 3.280839895 m))
> (voc/untag #voc/dstr "2.2^^unit:Meter" #(-> % str read-string meters-to-feet))
7.217847769000001
#2023-06-2212:14Ferdinand Beyerhttps://github.com/scarletcomply/license-finder v0.2.0 is now available, now supporting Leiningen’s project.clj files. Thanks to @rafaeldelboni for contributing this!#2023-06-2215:12pesterhazyThis looks very useful thanks!#2023-06-2214:39mpenethttps://github.com/mpenet/auspex 1.0.2 is out. It fixes an issue with stack consumption in a/loop & a/recur and moves the repo to tools.deps#2023-06-2311:11oliyHi all, martian 0.1.24 has been released.
martian is a library providing abstraction over your http client, supporting Swagger, OpenAPI and your own custom definitions.
https://github.com/oliyh/martian
This release improves:
• Parsing of numeric values, https://github.com/oliyh/martian/pull/178 thanks https://github.com/latacora-paul
This release fixes:
• Failing spec instrumentation when content-type is not specified, https://github.com/oliyh/martian/pull/179 thanks https://github.com/wkok
#2023-06-2314:25Wernerhttps://github.com/htihospitality/re-dash https://github.com/htihospitality/re-dash/releases/tag/0.3.0 - A ClojureDart (re)framework for building user interfaces, leveraging Flutter
Enhancements:
• Added support for http://day8.github.io/re-frame/Coeffects/
• Added support for http://day8.github.io/re-frame/Interceptors/
#clojuredart#2023-06-2319:37hlshipcom.walmartlabs/lacinia-pedestal 1.2
https://github.com/walmartlabs/lacinia-pedestal/
Exposes Lacinia GraphQL to HTTP clients using Pedestal, including subscriptions.
Significant changes:
• Many dependency upgrades, including Pedestal 0.6.0
• Logging related to subscriptions switched from debug to trace
https://github.com/walmartlabs/lacinia-pedestal/issues?q=is%3Aclosed+milestone%3A1.2#2023-06-2509:20Bobbi TowersCodemirror 6 extension based on nextjournal/lang-clojure and nextjournal/clojure-mode, using SCI for inline evaluation.
https://github.com/bobbicodes/lang-clojure-eval/
https://www.npmjs.com/package/lang-clojure-eval
I had to translate parts of clojure-mode into JavaScript and sort of cut a few corners but it basically works. Bug reports welcome. Sponsored by Clojurists Together for the Exercism Clojure track.#2023-06-2809:37Bobbi TowersFrom the live reveal stream: https://www.youtube.com/watch?v=SpENbnb40W4#2023-06-2513:42Dumchhttps://github.com/D00mch/robot desktop manipulation library 0.3.1 release.
• https://github.com/D00mch/robot#pixel-colors feature — get colors of pixels in ranges, squares.
• https://github.com/D00mch/robot#launching-apps feature;
• fix bugs, overload some functions, add more keyboard shortcut keys.#2023-06-2700:15Sam RitchieAnnouncing the first release (v0.1.0) of Emmy-Viewers! This library adds powerful, interactive 2D and 3D plotting to the #emmy computer algebra system via #clerk or #portal, all from Clojure, no ClojureScript build required (!!).
The https://emmy-viewers.mentat.org/ has Getting Started instructions — the easiest way to start is with the emmy-viewers/clerk template https://emmy-viewers.mentat.org/#clerk-project-template.
• Interactive docs: https://emmy-viewers.mentat.org/
• GitHub: https://github.com/mentat-collective/emmy-viewers
• Clojars: https://clojars.org/org.mentat/emmy-viewers
I still can’t quite believe this all works!!! See https://emmy-viewers.mentat.org/dev/examples/manifold/pq_knot, this https://emmy-viewers.mentat.org/dev/examples/mathbox/ode, a https://emmy-viewers.mentat.org/dev/examples/manifold/klein, https://emmy-viewers.mentat.org/dev/examples/simulation/toroid, https://emmy-viewers.mentat.org/dev/examples/mathbox/functions and https://emmy-viewers.mentat.org/dev/examples/manifold/fdg for 3D examples, and the https://emmy-viewers.mentat.org/dev/examples/mafs for interactive 2D examples.
And a quick gif. Amazing that this is all possible from the Clojure REPL, thanks to the incredible libraries I’m sitting on top of:#2023-06-2700:19Sam Ritchiethis is a HUGE documentation task, and each sub-library deserves more documentation beyond the examples I’ve put together so far. That will all come!#2023-06-2702:57Colin (fosskers)God speed!#2023-06-2716:07Sam RitchieHot on the heels of this release, thanks to a Clerk update, you can try some of this fully in the browser: https://emmy-viewers.mentat.org/dev/examples/mafs/edit
all calculus (via the D operator) is available etc, plus a ton more but that’s a fun one to try:#2023-06-2710:19mkvlrhttps://github.com/nextjournal/simple-http-server is a tiny thin wrapper around SimpleWebServer from https://openjdk.org/jeps/408 for JDK 18+ . Compatible with clojure -X.#2023-06-2712:14souenzzoadd this to readme
clj -Sdeps '{:deps{nextjournal/simple-http-server{:git/url"":git/sha"30061b0bb413369f6c180d8a9466f003fb13e08c"}}}' -X nextjournal.simple-http-server/serve!
btw, had this error:
Execution error (IllegalArgumentException) at sun.net.httpserver.simpleserver.FileServerHandler/<init> (FileServerHandler.java:74).
Path does not exist: /Users/enzzocavallo/src/auto-discovery/public
I think that you can serve . by default
maybe follow the https://github.com/emikulic/darkhttpd default options#2023-06-2712:16mkvlr@U2J4FRT2T good ideas! Do you want to submit a PR or shall I make the change?#2023-06-2712:16souenzzofeel free to do 🙂
I will only be able to in the weekend#2023-06-2712:17mkvlrwill do#2023-06-2712:27mkvlrhttps://github.com/nextjournal/simple-http-server/commit/beb273b4b0c563997f8177414840daa112cbf6e7 (made you a Co-Author)#2023-06-2815:44borkdudehttps://github.com/babashka/sci: Configurable Clojure/Script interpreter suitable for scripting and Clojure DSLs
SCI is used in https://github.com/babashka/babashka, https://github.com/babashka/nbb, https://github.com/nextjournal/clerk, https://github.com/BetterThanTomorrow/joyride/ and many https://github.com/babashka/sci#projects-using-sci projects.
0.8.40 (2023-06-28)
• https://github.com/babashka/sci/issues/888: add eval-string+ with explicit initial :ns and explicit last active :ns in return value
• https://github.com/babashka/sci/issues/683: better error message when trying to recur across try
• https://github.com/babashka/sci/issues/884: preserve error location in future with :sci/error
• https://github.com/babashka/sci/issues/886: support :require-macros in CLJS
#2023-06-2819:32Mark WardleAccording to Twitter @borkdude is on holiday … and still the code flies. ⛰️ :man-walking: borkdude #2023-06-2823:34Alex Miller (Clojure team)Clojure 1.12.0-alpha4 is now available
Bug fixes:
• https://clojure.atlassian.net/browse/CLJ-2686 clojure.core.server/parse-props - Fix exception if system properties concurrently modified during initialization (thanks Frank Yin!)
• https://clojure.atlassian.net/browse/CLJ-2694 Fix ratio invariants violated when using Long/MIN_VALUE
Fixes from work in prior 1.12.0 alpha releases:
• https://clojure.atlassian.net/browse/CLJ-2772 drop, nthrest, nthnext - Fix regression in behavior when n != positive integer
• https://clojure.atlassian.net/browse/CLJ-2741 drop - Fix meta inappropriately retained for StringSeq
• https://clojure.atlassian.net/browse/CLJ-2767 add-libs - Fix repl check always allows use
• https://clojure.atlassian.net/browse/CLJ-2769 add-libs - Fix line limit issues by using stdin
• https://clojure.atlassian.net/browse/CLJ-2773 c.j.process/[from,to]-file - Fix mismatch in param and docstring
• https://clojure.atlassian.net/browse/CLJ-2776 c.j.process/exec - Fix incorrect use of redirectErrorStream
• https://clojure.atlassian.net/browse/CLJ-2774 c.j.process/exec - Fix merge order of options to allow overriding
• https://clojure.atlassian.net/browse/CLJ-2778 c.j.process/capture - fix typo in docstring
• https://clojure.atlassian.net/browse/CLJ-2779 c.j.process/start - remove validation checks covered by defaults
Note that the changes in CLJ-2767 require *repl* to be bound to true (which was the prior intent in alpha2). This is true when using clojure.main/repl, but may require a change in other tools before it works. I'm happy to work with any toolsmiths out there if there are any questions, probably best to ping in #C06E3HYPR#2023-06-2900:27seancorfieldUpdated our systems at work to use Alpha 4. So far my sync-deps workflow with CIDER/nREPL seems unaffected by CLJ-2767 -- I started my REPL the usual way (jacking-in from Calva) with 1.12 Alpha 4 and was able to use sync-deps to load a new alias's dependencies into the running REPL, just like with Alpha 3. Will report any issues I run into in #C06E3HYPR#2023-06-2900:32Alex Miller (Clojure team)thanks! I did check Calva and things seemed ok there. I confess I do not know enough details about all the code involved to predict where we will see issues.#2023-06-2905:15tatutREPLey: a web REPL made with Ripley https://github.com/tatut/REPLey#2023-06-2905:25tatut“Language: CSS” 😄 I need to minify the CSS because there’s more of it than Clojure code here#2023-06-2918:07Michaël SalihiIf minifying CSS is not suffisant, you can also put a .`gitattributes` file excluding some language like I did on this project. https://github.com/prestancedesign/pingcrm-clojure/blob/main/.gitattributes#2023-07-0211:07tatutI made an intro video to better see what it is about https://youtu.be/UiRq97HZctQ#2023-07-0520:00zeitsteinI've been playing around with various similar tools this week and REPLey is definitely an interesting project. Implementing navigation (with breadcrumbs!) similar to https://github.com/phronmophobic/viscous is really cool. Thank you!
Some thoughts/comments:
• Is CLJS support planned?
• I like how toggle state and truncation works by default. You get enough of a sense of the tapped value, then FULL gives you all info without having to unfold nested values. (Something that bugs me about Portal.)
• Ability to reference and manipulate tapped values from the REPL box would be cool.
• Button to clear all tapped values.
• More prominently displaying the time and origin of the tap would be nice. shadow's inspect does this and I quite like 'logs' from Portal (see attached img; though ms precision would be better). Ability to "label" taps could be a nice addition.
BTW, I tried b85a1f0ccd80215919d941a7e7fe488dac082694 over the weekend. However, the latest commit as of now, throws:
; Syntax error macroexpanding h/html at (repley/main.clj:106:5).
; No garden compiler found, add garden to deps to support CSS compilation
#2023-07-0520:08tatutThanks for trying it out. #2023-07-0520:09tatutCljs is not planned as ripley, the underlying ui library ia strictly server side rendering#2023-07-0520:38zeitsteinPerhaps I should've phrased it more clearly. I meant the ability to add a tap on CLJS side. I wonder if that is doable. A quick glance at https://github.com/djblue/portal/tree/master/src/portal/shadow, it seems that taps basically send HTTP requests to the server.#2023-07-0520:45tatutThat sounds doable. #2023-07-0610:33tatutadded a timestamp (and duration if value was evaluated by REPLey)... can be configured with :timestamp-format (nil to disable)#2023-07-0610:34tatutthe latest commit should start, added a badge showing latest github actions test status#2023-07-0611:52zeitsteinStill seeing the garden-related error with latest commit.#2023-07-0611:53tatutby running clj -M:dev ?#2023-07-0611:54tatutRipley supports garden styling, but doesn't provide the dependency (so that's why you can get that, but REPLey isn't using those)#2023-07-0611:55zeitsteinI included it as a library. Requiring repley.main throws.#2023-07-0611:57tatutok, accidentally had 1 garden style there... can you try with the latest commit? committed just now#2023-07-0611:59zeitsteinThat works.#2023-07-0611:59tatutgreat, thanks for reporting it#2023-07-0612:01zeitsteinAre you aware of any limitations with the EDN visualisation navigation? Simple stuff like {:foo {:bar 1}} works, but with a larger map from my server it doesn't 🙂#2023-07-0612:02tatutyes, edn stuff needs to have the key read able#2023-07-0612:07tatutif you have minimal samples of what fails in navigation, it would be useful if you can report that as an issue in github#2023-07-0612:07zeitsteinI'm trying to find out know, will report.#2023-07-0612:15zeitsteinIt seems to work before I press "full".#2023-07-0612:17tatutyes, seems to be missing the id when rerendering without truncation#2023-07-0612:17tatutthat should be a quick fix#2023-07-0612:19tatutpushed#2023-07-0612:21zeitsteinFixed, thanks. A thought: maybe navigation should not reset the truncation?#2023-07-0612:22tatutcurrently the truncation is component local state and thus navigation removes and creates a new component... could be moved to another place#2023-07-0612:23tatutI agree, it certainly could remember that you expanded a given result already#2023-07-0612:23zeitsteinJust a thought. Quite feasible others would like it to reset 🙂#2023-07-0612:25zeitsteinI could probably quibble about minor details of the UI, but that's not important at this point. I'll try to look into what it would take to support CLJS taps. I'd quite like to use REPLey for my projects 🙂#2023-07-0612:26tatutwould just an HTTP endpoint to receive edn formatted values be enough? that should be then easy to integrate into a cljs project#2023-07-0612:27zeitsteinI think that's how Portal does it, yeah.#2023-07-0612:27tatutI can add the endpoint at least, I'm not currently doing cljs so don't have a shadow build to test with#2023-07-0612:28zeitsteinGreat. With the endpoint in place, I could play around.#2023-07-0612:39tatutadded a receive endpoint, you can call it like
% curl -X POST -d "{:hello \"there\" :meaning-of-life 42}"
it returns 204 no content always#2023-07-0613:10zeitsteinI have it working. Are you interested in a PR? (There's not much to it.)#2023-07-0613:11tatutSure#2023-07-0613:12zeitsteinOne issue I'm encountering now: No reader function for tag gdb/ident.#2023-07-0613:13tatutWell that is the problem with a generic edn parsing, dont have any specific reader tags installed#2023-07-0613:13zeitsteinCan we add edn readers to the repley-handler config or is this more of a userland concern?#2023-07-0613:14tatutI think it would be good to have in the config#2023-06-2905:39phronmophobichttps://github.com/phronmophobic/clong: A wrapper for libclang and a generator that can turn c header files into clojure apis.
Version 1.0
• Use javacpp for pulling native dependencies via maven
• Bug fix for structs with bitfields
• Simplify def-api into smaller pieces
I've been using clong for several different projects and I think it's ready for the 1.0 release 🎉#2023-06-2919:44Kelvinhttps://github.com/yetanalytics/pathetic version 0.5.0 is now out:
• Remove Clojure(Script) and data.json as library dependencies, and update core.match and Instaparse dependencies
• Update the apply-value function to support the following optional args:
◦ :wildcard-append?: Dictates if wildcard values should be appended to the end of existing seqs. Default false (this is a breaking change from the previous default behavior).
◦ :wildcard-limit: Dictates how many wildcard paths should be generated. If it is not present then the entire coll gets overwritten at each wildcard location if :wildcard-append? is false; if it’s true, one new path gets appended.
• Add an apply-multi-value function that is similar to apply-value, except that it must accept a collection of values that will be applied in order. Returns once the values or the available path seqs runs out. Also accepts :wildcard-append? and :wildcard-limit.
• Add a speculate-paths function that acts like get-paths but is not stopped by missing values. Also accepts :wildcard-append? and :wildcard-limit.
• Various internal namespace changes and implementation refactors#2023-06-3011:00Matthew Davidson (kingmob)Announcing Aleph 0.7.0-alpha1! This is a preview of the HTTP/2 code we've been adding. For 0.7.0-alpha1, it's client-only, not server (that's coming soon). Please give it a try!
For the most part, the changes will be invisible (as long you weren't using undocumented functions). Two new options are available for connection-pool:
1. http-versions - a vector of preferred versions you'll support, defaults to [:http2 :http1]. If you want to force HTTP/1-only, you'd create a custom pool like: (connection-pool {:connection-options {:http-versions [:http1]}}) . NB: servers may ignore your preferred protocol order and choose any allowed version.
2. force-h2c? - by default, you can't do insecure HTTP/2, but the spec allows it if you know in advance a server supports it. And by server, that means your server that you control, probably in a private intranet. Setting this to true will use non-TLS, cleartext HTTP/2.
https://clojars.org/aleph/versions/0.7.0-alpha1
Many thanks to @arnaudgeiser for his help.#2023-06-3017:50onetomhttps://gist.github.com/onetom/0291878c1a4b00819f8297bbfa330b7f
> Display a Yes/No dialog, which appears on the very top of every app and grabs
> the focus and also gives it back to the REPL, after making the choice, unlike
> a Swing dialog, for example.
>
> It's useful for confirming irreversible operations, like file or DB deletion.
> It uses AppleScript, so it only works on macOS and on a local REPL.#2023-07-0201:45ericdalloclojure-lsp Released https://clojure-lsp.io/ https://github.com/clojure-lsp/clojure-lsp/releases/tag/2023.07.01-22.35.41 with improvements and new features!
Main highlights:
• Recently I focused on java interop improvements in both clojure-lsp and clj-kondo, so now we have more java analysis to provide features, we have now hover doc (pic1) and completion for java static members! We still have to enhance clj-kondo and lsp to be able to provide for all java usages besides static ones only, but it's a huge start!
• Keywords completions are now smarter, checking other namespaces and sorting better.
• We have more visual feedbacks when LSP is doing post start tasks in the editor.
Thank you for all contributors and sponsors, especially #clj-together gratitude clojurists-together
For more information, come to #lsp!#2023-07-0314:05eval2020v0.8.0 of https://github.com/eval/deps-try#installation, a tool to quickly try Clojure (libraries) on rebel-readline.
Changes:
• Upgrade [compliment/compliment](https://github.com/alexander-yakushev/compliment).
Includes provided PRs (thanks @alexyakushev for the feedback and releases!):
◦ suggest namespaces from cljc files.
e.g. TAB-ing at (require ‘[| now suggests malli.core.
◦ docs of ns-alias work just like the full ns.
◦ aliases can be completed.
◦ completions and documentation also work when symbols are preceded by literals.
e.g. #’some-ns/some-db
• Suggestions UI:
◦ don’t limit amount (let jline handle this).
◦ vars show up in yellow.
◦ suggested namespaces that are not required show up in magenta.
◦ sort namespace suggestions based on ‘depth’.
• Fix clojuredocs-url of namespaces.
• Sort apropos results by length.
• source and examples also work when symbols are preceded by literals.
• showing docs of special forms.
• highlighter
◦ highlight ns-aliases.
• allow to override project-deps.
e.g. $ deps-try ~/projects/compliment-fork
• Use clojure 1.12.0-alpha4.
#2023-07-0314:12eval2020Updated screenshot:#2023-07-0414:58gaboHi all o/ I'm introducing https://github.com/galuque/datomic-jmx-metrics
A little project that defines a callback function to be used with Datomic's https://docs.datomic.com/pro/operation/monitoring.html#custom and expose it's metrics via JMX
With the metrics exposed via JMX, you can use tools like JConsole or VisualVM to monitor your Datomic system in development.
And in production you can use tools like Prometheus and Grafana to monitor your Datomic system using https://github.com/prometheus/jmx_exporter
It's available in https://github.com/galuque/datomic-jmx-metrics/releases, go keep an eye on your databases 😄
---------------------------------------------
PS: Here's an example https://github.com/galuque/datomic-compose/tree/monitoring that uses the library to monitor Datomic with prometheus and grafana.#2023-07-0415:18robert-stuttafordneat!#2023-07-0420:50escherizeThe hiccup alternative https://github.com/escherize/huff 0.0.7 has been released!
It has more features and better performance than hiccup/hiccup, and also works with babashka.
This release includes 2 main bits:
1. added https://github.com/escherize/huff#nested-tag-parsing
2. disallow https://github.com/escherize/huff#raw-html-tag tag by default#2023-07-0422:24genmeblogCool, do you plan to deploy it to Clojars?#2023-07-0516:55teodorluNice!! Appreciate the babashka compatibility.
Here's more details about the performance improvement, if anyone is interested: https://github.com/escherize/huff/blob/master/perf/timings.md
A 400kb html page from Wikipedia was produced in 303 ms with hiccup, and in 214 ms with huff.#2023-09-1701:44escherizeThis was deployed to clojars shortly after your suggestion @U1EP3BZ3Q 👍 #2023-07-0514:08mauricio.szaboYesterday I pushed the first version of https://gitlab.com/clj-editors/orbit. It is basically the "REPL Clients" for Chlorine - with the exception of Socket REPL, that I will drop on future versions. It's a ClojureScript (only CLJS for now, working on adding Clojure support) library that connects to nREPL and the Shadow Remote API to evaluate commands, break evaluation, send nREPL and Shadow commands, etc. It has been used into Chlorine for years, and I'm splitting the library to test it better, be useful on other tools, and basically to avoid some "conversions" I've been doing. This is the first release, it's probably not yet 100% complete, but it's already quite usable too. Discussions can be at either #CF02KPG4U or #C04CAKAGADU 🙂#2023-07-0515:22didibusWhen you say you'll drop the socket repl, do you mean you'll add support for it to Orbit later, or that you will no longer work to support Socket Repl?#2023-07-0520:21mauricio.szaboI will no longer support it, basically. It never worked well, it's way more complicated than it seems, and even by using UNREPL there are some very hard to solve problems to make it work right (an example - when evaluating code using the Datahike DB, UNREPL will spit unreadable EDN which breaks the whole process)#2023-07-0520:54didibusMake sense. Ya, it's too bad. I wish the core team pursued that idea a bit more, the UNREPL concept, with the default repl. Because it has a lot of potential. I really only relied on it for when I needed to connect to a prod application. That's where it shined. And having a little bit of auto-complete and all in those situations was quite nice.#2023-07-0521:50mauricio.szaboI still intend to keep all functionality for autocomplete without middlewares and such, it's just the socket REPL connection that's going away.#2023-07-0610:46borkdudeBabashka https://github.com/babashka/http-client: HTTP client for Clojure and babashka built on java.net.http
0.4.12
• Add babashka.http-client.websocket API (mostly based on hato, thanks https://github.com/gnarroway). See https://github.com/babashka/http-client/blob/main/API.md#babashka.http-client.websocket.
• The :ssl-context {:insecure true} option was made more accepting, see babashka issue https://github.com/babashka/babashka/issues/1587
• https://github.com/babashka/http-client/issues/32: Documentation updates for missing parameters and functions (https://github.com/casselc)
• https://github.com/babashka/http-client/issues/34: add construction helpers for :cookie-handler, :ssl-parameters, and :executor (https://github.com/casselc)#2023-07-0610:47borkdudeThanks @U015879P2F8 for collaborating#2023-07-0611:52jjttjjAwesome, thanks for adding the websocket stuff!#2023-07-0617:50scottbalehttps://clojurians.slack.com/archives/C015AL9QYH1/p1688665683050749#2023-07-0707:36Matthew Davidson (kingmob)https://github.com/clj-commons/byte-streams 0.3.3 is now available. It incorporates the work of @vale and @dergutemoritz. Many thanks!
Fixes include eliminating a lot of boxed math, the temp removal of a couple type hints that AOT has weird issues with, and better kondo support.
https://clojars.org/org.clj-commons/byte-streams/versions/0.3.3#2023-07-0813:33oliySuperlifter 0.1.5 has just been released 🎉
Superlifter is an implementation of the DataLoader pattern for Clojure/script
https://github.com/oliyh/superlifter
This release fixes:
• Buckets being started more than once during highly concurrent usage #29
This release improves:
• Dependencies updated
Superlifter is generously sponsored by @toyokumo#2023-07-0905:11Jungwoo Kim@U7JHWBCS0 @U02TRLSDY11 🎉#2023-07-0908:52Matthew Davidson (kingmob)True Grit 2.1.30 is now available. It incorporates bug fixes from the underlying Resilience4j library.
True Grit is for when you need fns that don't give up at the first sign of failure. It offers circuit breakers, retries, timeouts, rate limiters, and bulkheads in an idiomatic, easy-to-use package.
https://clojars.org/net.modulolotus/truegrit/versions/2.1.30#2023-07-1002:00Matthew Davidson (kingmob)Primitive-math 1.0.1 is now available, for when you need reflection warnings in your math hot path.
New additions include a version of rem , better linter support, and docstrings with sane, non-macro-generated parameter names. In addition, the old single-segment namespace is now deprecated; switch your requires to clj-commons.primitive-math to ensure greater compatibility with tools like Graal.
https://clojars.org/org.clj-commons/primitive-math/versions/1.0.1#2023-07-1006:45Ludger SolbachInitial release of Overarch, a data specification and tool for C4 architecture modelling and diagram generation. Models and views are specified in EDN files. Diagrams are generated as PlantUML files with the Overarch CLI tool. See https://github.com/soulspace-org/overarch.#2023-07-1008:05pithylessHow does this compare to https://github.com/FundingCircle/fc4-framework?
If I understand correctly, FC4 was a 2-way sync but strictly revolved around the proprietary Structurizr? (And I'm not sure if it is still maintained) While overarch looks like a one-way sync, EDN input, multiple exports?#2023-07-1008:06pithylessAh, my mistake. Just found https://github.com/soulspace-org/overarch/blob/main/doc/design.md :)#2023-07-1008:24Ludger SolbachYes, no two way sync at the moment. Modelling is done in EDN only (at least currently). But I want to prevent any lock in, so the data can be exported as JSON and as Structurizr workspace (experimental).#2023-07-1219:35jumarIt looks like a nice project.
What's the "reusable" part of the story?
Is that achieved by using :ref ?#2023-07-1219:35jumarBtw. there's a small typo in Rationale: https://github.com/soulspace-org/overarch#rationale
> But but the models#2023-07-1222:03Ludger SolbachThanks for the feedback, the typo is fixed now. Regarding the reusable part of the story, it should be actual reusable on different levels. With :ref the reusablility of model elements in different diagrams is archieved, which is a benefit over the diagram focused specification in the PlantUML C4 DSL, where you have to duplicate information in the different diagrams. Another level of reuse (and composablity) is the combination of smaller models to larger models with loading all EDN files in a directory, namespaced IDs to avoid conflicts and :ref's to refer to other model elements. Even another level of reuse lies in the plain data specification and the extensible nature of EDN. you can augment models with information that is not evaluated by overarch, but maybe other tools working on the data. Because it is just plain data, you don't need a specific parser to read the model and view descriptions. And with the JSON export you can even reuse the data in languages, for which no EDN reader exists. So the model is not bound to overarch as a specific tool but stands for itself.#2023-07-1312:32jumar👍#2023-07-1312:34jumarThat's a great summary. Perhaps worth adding to the docs in some form?#2023-07-1320:25Ludger SolbachThat's a good idea. I have to reformulate it a bit and find a place in the docs. Thanks.#2023-07-1407:19Ludger SolbachI've added it as a Q&A in the design documentation.#2023-11-0516:27fmjreyHi @U017HM6BG07, thanks for publishing overarch, looking at it now. If you were to have more textual elements for requirements engineering and traceability, how would you go about it?#2023-11-0610:33Ludger SolbachThanks. Traceability can be realized with relations between the different model elements, e.g. between a use case and a container or component. Currently there is no view to visualize those relations, but it could be rendered with graphviz like the context view. For requirements currently only the use case view exists. You could enhance the model with your own attributes (e.g. in another namespace). Or if you f´have ideas on how to model requirements, we can discuss them and see if they fit into the concept of overarch. The goal of overarch is to provide a holistic approach to modelling software systems.#2023-11-0610:37Ludger SolbachMaybe you could provide me with an example of what you like to achieve with requirements.#2023-11-0610:38fmjreyYes relations between the elements is definitely the approach (hence overarch:). I'm considering using https://github.com/nextjournal/clerk to create the glue, I guess one could create a requirements.edn file containing the data, clerk could load it and display it in various ways, tabular of course, but I'm sure we can also have queries, filtering, etc. I guess one could have custom viewers in clerk for displaying the overarch generated diagrams...#2023-11-0610:39fmjreyI wonder if clerk could also help with writing the requirements, meaning using forms and writing back to the edn file...#2023-11-0610:40Ludger SolbachThe file structure for your model is completely in your hands. Overarch just picks up every .edn file in the model dir recursively.#2023-11-0610:43Ludger SolbachI'm currently modeling a system with 50 external systems connected and about 80 containers. Putting everything in one file is no option. 😜 So I'm using a deep directory structure and context-boundary elements to model some internal structure.#2023-11-0610:45Ludger SolbachHow do you like to model your requirements? As use cases or user stories? Or more like a catalog of flat requirements?#2023-11-0610:46fmjreyThere was some Eclipse tool I used in the past, based on the Requirements Modeling Framework and the ReqIF format, that could give some ideas on how to structure the data so that ReqIF export could be envisaged (I dont really need that format but it seems a good idea while avoiding the NIH syndrom)#2023-11-0610:47fmjreyIf I were to capture the requirements now I'd use some word document, and smart referencing with models in other tools. But the idea of having everyting captured as data like overarch does, including traceability, while allowing various forms of visualization is appealing.#2023-11-0610:48Ludger SolbachI will take a look into the framework and see what I can make of it.#2023-11-0610:49fmjreyI have to attend other matters now, but I'm planning to look into clerk and get inspiration from ReqIF to define an edn data structure, starting simple of course.#2023-11-0610:49Ludger SolbachOverarch hasan initial markdown export so generating textual documents is in scope. 🙂#2023-07-1020:30staypufdUpdated Clojure Austin, TX meetup.
Join me at Clojure Talk https://meetu.ps/e/Mf24t/jPcR/i#2023-07-1020:35steffanI suggest #C03RZRRMP for publicising events 🙂#2023-07-1022:45seancorfield@U060WE55Z Deleted as off-topic from #C06MAR553 Feel free to post it in #C03RZRRMP#2023-07-1104:09cflemingCursive 1.13.0 is out. It greatly overhauls how deps is integrated, adds support for IntelliJ 2023.2, and has some bug fixes and quality of life improvements too. https://groups.google.com/g/cursive/c/deI1iKacYL0/m/ZbIm_dajBgAJ#2023-07-1107:01tengstrandThis really improves the #C013B7MQHJQ integration in Cursive. Thank you so much for all the great work Colin!#2023-07-1108:28cflemingI should have put that in the announcement too! But yes, much better support there too.#2023-07-1117:22henrik@U0567Q30W If, after update, clojure.core can no longer be found, what would be a good way to restore order?
I.e., it longer finds defn etc.#2023-07-1117:24henrikAlso,
Failed to read artifact descriptor for org.clojure:data.json:jar:2.4.0
For whatever reason, it seems unhappy about
org.clojure/data.json {:mvn/version "2.4.0"}#2023-07-1602:29namenuThis update is amazing. Thank you so much cursive #2023-07-1207:45pezA new version of #calva just out, https://github.com/BetterThanTomorrow/calva/releases/tag/v2.0.376. There’s https://github.com/BetterThanTomorrow/calva/blob/published/CHANGELOG.md there since last announcement, I’ll just mention the last addition here: Fiddle Files Support. I’m a big fan of fiddle files as described in episode 014 of the #clojuredesign-podcast, and I have been wanting to add some extra support for it in Calva ever since that aired. Now I have done so: https://calva.io/fiddle-files/ It’s very much the MVP. Feedback welcome. 🙏 ❤️ calva#2023-07-1214:23Daniel Mason🚀 #CG3AM2F7V version 1.24.0 has just been released!
This release is focused on a number of enhancements to XTDB's checkpointing system. Checkpointing is an important concept for production deployments as it allows XTDB to scale out in a cluster and spin up new nodes quickly without having to replay the transaction log from the start each time on every node.
Release notes here: https://github.com/xtdb/xtdb/releases/tag/1.24.0
Thank you to everyone who helped us with designing and testing these enhancements 🙌#2023-07-1319:41borkdudehttps://github.com/clj-kondo/clj-kondo: static analyzer and linter for Clojure code that sparks joy ✨
2023.07.13
• https://github.com/clj-kondo/clj-kondo/issues/2111: warn on symbol in case test using new opt-in linter :case-symbol-test
• https://github.com/clj-kondo/clj-kondo/issues/1199: new linter, :unsorted-imports
• https://github.com/clj-kondo/clj-kondo/issues/1125: new :deprecated-namespace linter
• https://github.com/clj-kondo/clj-kondo/issues/2097: analyze and act on defprotocol metadata (https://github.com/lread)
• https://github.com/clj-kondo/clj-kondo/issues/2105: Consider .cljd files when linting (https://github.com/ericdallo)
• https://github.com/clj-kondo/clj-kondo/issues/2101: false positive with if-some + recur
• https://github.com/clj-kondo/clj-kondo/issues/2109: java.util.List type hint corresponds to :list or nil
• https://github.com/clj-kondo/clj-kondo/issues/2096: apply :arglists metadata to :arglist-strs for analysis data (https://github.com/lread)
• https://github.com/clj-kondo/clj-kondo/issues/256: warn on reader conditional usage in non-cljc files
• https://github.com/clj-kondo/clj-kondo/issues/2115: false positive :redundant-fn-wrapper in CLJS when passing keyword to JS
• https://github.com/clj-kondo/clj-kondo/issues/1082: protocol methods do not support varargs
• https://github.com/clj-kondo/clj-kondo/issues/2125: Setting clj-kondo.hooks-api/*reload* to true does not lint with the latest hook changes.
• https://github.com/clj-kondo/clj-kondo/issues/2135: private vars starting with _ should not be reported as unused
• https://github.com/clj-kondo/clj-kondo/issues/1199: warn about reader conditional features that are not keywords, e.g. #?(:clj 1 2) (2 is not a keyword)
• https://github.com/clj-kondo/clj-kondo/issues/2132: false negative unused value in clojure.test
• https://github.com/clj-kondo/clj-kondo/issues/1294: redefined var comment edge case
• Rename :quoted-case-test-constant to :case-quoted-test
• Rename :duplicate-case-test-constant to :case-duplicate-test#2023-07-1419:46hlshiporg.clj-commons/pretty 2.0
https://github.com/clj-commons/pretty
Pretty prints things prettily; mostly, carefully formatted exception output using ANSI colors, smarter ordering, and name-demangling to take the pain out of figuring out what went wrong, and where.
This release moves the library to clj-commons, and changes the root namespace from
io.aviso to clj-commons. It strips down the library to its essentials, removing
the columns, component, and logging namespaces entirely.
Changes:
• Stripped out a lot of redundant documentation
• Reworked the ansi namespace to primarily expose the compose function and not dozens of constants and functions
• ansi determines whether to enable or disable ANSI codes at execution time
• ansi now honors the NO_COLOR environment variable
• Stripped out code for accessing the clipboard from the repl namespace
• Some refactoring inside exceptions namespace, including changes to the *fonts* var
• Removed the logging namespace and dependency on org.clojure/tools.logging
• Removed the component namespace, but the example is still present in the documentation
• Ensure compatible with Clojure 1.10 and above (now tested in GitHub action)
• The "use -XX:-OmitStackTraceInFastThrow" warning is now formatted, and is output only once
• write-exception was renamed to print-exception
• write-binary and write-binary-delta renamed to print-binary and print-binary-delta
• compose can now pad a span of text with spaces (on the left or right) to a desired width
• Binary output now includes color coding#2023-07-1806:06Stefan@U04VDKC4G Thank you very much for taking this on! I'm seeing a few confusing things though:
• The post here says "2.0", the badge on github says "1.0", the Releases page on github says "1.4"
• Clicking on the badge to go to Clojars, I see "clj-commons/humanize" listed as the github repo for clj-commons/pretty
• Clicking on the link "http://cljdoc.org/d/org.clj-commons/pretty" in Github takes me to a page about clj-commons/humanize
• Trying to use version 2.0 of clj-commons/pretty did actually work 🎉 #2023-07-1815:13hlshipThe 2.0 vs. 1.0 thing should be straightened out now; it was a bad push of humanize (with a cut-and-paste of pretty’s build.clj). Clojars deleted the offending jar.#2023-07-1420:24hlshiporg.clj-commons/humanize 1.0
Back from the dead!
humanize is a small Clojure[Script] library to format things in a human-readable format, such as file sizes,
time durations, and lists.
https://github.com/clj-commons/humanize/
New in 1.0:
• Refactored namespaces with move to clj-commons
• Update dependencies and fix linter issues
• Other minor improvements
https://github.com/clj-commons/humanize/issues?q=is%3Aclosed+milestone%3A1.0#2023-07-1501:42seancorfieldhttps://github.com/seancorfield/clj-new gets its first new release in just over a year! 1.2.404 switches all of the templates over to raw tools.build (from my now-archived build-clj wrapper) and updates several dependencies, including (finally) moving to the non-alpha tools.deps -- follow-up in #deps-new (which does double duty).#2023-07-1813:33Ingy döt NetGreetings! My name is https://github.com/ingydotnet/ and I was invited here by @pez.
I helped invent and currently maintain the https://yaml.org/.
A few months ago I started writing a Clojure platform called https://github.com/ingydotnet/lingy.
Lingy intends to target host languages currently lacking a Clojure, starting with Perl.
Lingy wants to take Clojure concepts deep into Perl including compiling to some JITing VM (tbd).
@pez already has me working on an nREPL implementation for integration with Calva and other Clojure editors!
I also started a sister language called https://github.com/yaml/yamlscript that is really just an alternate syntax reader for Clojure platforms.
At https://tprc.to/tprc-2023-tor/ last week I gave a talk about https://www.youtube.com/watch?v=9OcFh-HaCyI.
I'm extremely pleased that it got noticed by @pez and led me to this amazing place.
Among other things, a top goal of both Lingy and YAMLScript is to bring more programming communities together.
Please stop by the new #lingy and #yamlscript channels and let's chat!#2023-07-1821:01bschragInitial release: open-source https://github.com/bobschrag/clolog#2023-07-1913:41MaxI don’t have a ton of experience with logic programming so this may be a silly question, but how does this differ from core.logic?#2023-07-1916:43bschrag@U01EB0V3H39 This https://stackoverflow.com/questions/28467011/what-are-the-main-technical-differences-between-prolog-and-minikanren-with-resp may be of interest.
I wanted to exploit in Clojure the style of programming I've long used in other Lisps. clolog includes almost everything I ever wanted or wished for in this context.
Particularly important to an application at hand has been https://link.springer.com/chapter/10.1007/978-1-4684-3384-5_11 (clolog not).#2023-07-1917:39MaxSo if I understand correctly, clolog is an implementation of a prolog-like in Clojure rather than a gateway to an external prolog implementation? And prolog-likes and minikanrens aim to do mostly the same thing but make different tradeoffs? The stackoverflow link you posted mentioned that one of the major tradeoffs between the two was that minikanren is typically embedded whereas prolog is usually a separate program; it seems like clolog removes that element of the tradeoff?
Without the embedded-vs-external tradeoff, what are the reasons why one might choose a minikanren vs a prolog? Or are they similar enough in most cases that it’s the kind of thing where you’ll know what you need once you’re deep enough to need it?#2023-07-1921:19bschrag@U01EB0V3H39 Yes, clolog is a Clojure-embedded Prolog interpreter.
core.logic seems (I've not been a user) to be purer, side effect-free logic programming, naturally amenable to parallelism and to supporting full relational or constraint logic programming.
clolog (or any Prolog) should be similarly parallelizable when sticking to a subset---avoiding cut, if-then-else, and (if eschewing nonmonotonic reasoning) negation as failure.
Clojure itself includes practical escapes from pure functionalism---e.g., atoms.
You don't want to overuse those things, but, when you want them, you want them, I think.#2023-07-1921:26MaxInteresting! What are the kinds of problems that clolog/prologs are better suited for?#2023-07-1921:41bschrag@U01EB0V3H39 All my experience is with Lisp-embedded Prologs, where it's been a matter of parceling out functionality---what works more naturally on the Lisp/Clojure side, what on the Prolog/clolog side, and how you want to control all that. If you want the things in clolog's bag of tricks, then there they are. 🙂#2023-07-2009:57borkdudehttps://github.com/babashka/babashka: Native, fast starting Clojure interpreter for scripting
1.3.182 (2023-07-20)
• https://github.com/babashka/babashka/issues/1579: add clojure.tools.reader/resolve-symbol
• https://github.com/babashka/babashka/issues/1581: bb print-deps: sort dependencies (https://github.com/teodorlu)
• Upgrade babashka.http-client to 0.4.12, fixes :insecure option
• Bump https://github.com/borkdude/edamame to 1.3.23: fixes infinite loop with reader conditional expression
• Bump https://github.com/yogthos/Selmer to Bumping to 1.12.59
• Bump https://github.com/borkdude/deps.clj with more fixes which should make downloading/installation of tools jar more robust
• Add .ssl.X509ExtendedTrustManager class
• Bump https://github.com/babashka/process: accept path or file as :dir argument
• Bump https://github.com/weavejester/hiccup to 2.0.0-RC1
Thanks for the support gratitude !#2023-07-2100:05wevrem@U04V15CAJ grammar nitpick: “fast-starting” should be hyphenated.#2023-07-2101:39Colin (fosskers)Whoa nice, TIL that Babashka has timbre and simple web server stuff built in!#2023-07-2101:39Colin (fosskers)What's the expected use case for say using hiccup in this way?#2023-07-2108:40borkdude@U058DHAN3UP You can see an example of a babashka web app with hiccup here:
https://github.com/kloimhardt/babashka-scittle-guestbook#2023-07-2109:02Colin (fosskers)Thanks, good to know one could whip up quick servers in a pinch!#2023-07-2017:24gnlHey everyone,
I haven't been around these here parts in a while, but I have now returned with not one, but TWO announcements, the first one being a long overdue status update on Ghostwheel, which I'm sure everyone thought long dead and buried, but they'd be wrong! So wrong. Which is to say that yes, TL;DR, it is in fact dead, but (most of) its parts live on in beautiful synergistic independence. https://github.com/gnl/ghostwheel/blob/master/STATUS.adoc.#2023-07-2021:40eggsyntaxHooray!#2023-07-2021:59eggsyntaxThis is awesome! I'd totally missed Guardrails somehow, and I'm really looking forward to playing with Playback!
I hate to say it but I think the Playback screencast is really confusing, mainly because the number of windows that are open and undergoing change made it really unclear what I should be looking at. I think the use of (presumably Guardrails?) typing on foo will also throw some people off.
Personally I think your best option would be to hide the nREPL entirely, and put the rich comments in the same window as the definition of foo, so that you really only have two windows active at a time. Some narration might really help too, but with just two windows I think you could get away without it.
Hope that's helpful. Any confusion I may have had was far outweighed by excitement about Guardrails and Playback 😁#2023-07-2022:05gnlNo, you're totally right, it's horrible! :D I was at the point where I just had to get the thing out the door, but yeah, way too much going on. The nREPL hiding is a good idea, I was thinking that too. Will definitely redo it in the not too far future, hopefully already over the next days.#2023-07-2022:12gnlAdded a note to the YouTube video, but yeah, definitely needs redoing.#2023-07-2022:12eggsyntax> I was at the point where I just had to get the thing out the door
Heh, I know that feeling all too well 😂#2023-07-2022:14gnlWhen you get a chance to play around with it, let me know how it goes!#2023-07-2022:15eggsyntaxFor sure!#2023-07-2101:14gnlA long way from greatness, but definitely better:
https://www.youtube.com/watch?v=sjxPj7DqUSs#2023-07-2114:36StefanWe've been using Guardrails in our product for a while now, I love it!#2023-07-2115:50eggsyntax> A long way from greatness, but definitely better:
Ah, yeah, that definitely seems clearer to me! I'd still lean toward either removing the window/section with the rich comment (in favor of putting the rich comment in the same buffer as the defn), or use the mouse to switch between upper-left and lower-left, because it's a bit hard for my eye to notice when the blinking cursor switches windows. But that's just a suggestion, it already seems way clearer to me!#2023-07-2115:51eggsyntax(filed an issue on the repo, btw -- I got an error when I tried to incorporate playback into a clojure-only project. NBD of course, just wanted to let you know 🙂)#2023-07-2116:23gnl@UGNFXV1FA I love that it's collecting kudos-by-proxy for me 😁 I'm really glad Tony picked it up and took as good care of it as he did when I fell off the radar, and kept the hope alive that we'll be seeing widespread gspecs throughout all kinds of codebases at some point in the future.#2023-07-2116:25gnl> use the mouse to switch between upper-left and lower-left
That occurred to me right after I'd finished publishing the new version and I decided to get over my tendency to fiddle beyond a reasonable point and not redo it this time, much as it pained me. 😅#2023-07-2116:25gnl> (filed an issue on the repo, btw -- I got an error when I tried to incorporate playback into a clojure-only project. NBD of course, just wanted to let you know
I assume this goes away if you add ClojureScript to your dev dependencies?#2023-07-2116:26eggsyntax~I'd assume so, will try to check that today but work is a bit crazy currently so may not get time.~#2023-07-2116:31eggsyntaxYep, confirmed.#2023-07-2116:45gnlCool, thanks, I replied to https://github.com/gnl/playback/issues/1 to keep the conversation in one place. TL;DR – I'm okay solving this with a hammer instead of a scalpel.#2023-07-2208:46StefanAlso kudos to @U066U8JQJ for using it in Pathom, that’s how we found out about guardrails!#2023-07-2017:25gnlThe second one is my new open-source project:
https://github.com/gnl/playback/
There's a short screencast, but in the 3 minutes it takes to watch, you might just be up and running with the actual library.
If you like it, come upvote the https://news.ycombinator.com/item?id=36803438, so I can make the front page and get eyeballs and internet points.#2023-07-2313:04Dustin GetzThree.js + Electric Clojure : https://github.com/HendrikLevering/electric_three_demo#2023-07-2317:21djanusI’ve released version 0.3.6 of https://github.com/nathell/skyscraper, a framework for structurally scraping whole sites in Clojure. Get it from Clojars: {skyscraper/skyscraper {:mvn/version "0.3.6"}} .
Changes in this release:
• Feature: New option :use-http-headers-from-content that can be set to false to disable charset detection based on the HTML response body.
• Fix: Uncaught exceptions thrown by enhancers (like the DB one) should now be propagated to the toplevel and handled gracefully.#2023-07-2319:26Ertugrul CetinEnion Online: Epic PvP Battle Game Now Open Source on GitHub: https://github.com/ertugrulcetin/enion
• ClojureScript + PlayCanvas game engine
• Clojure for multiplayer part
#2023-07-2321:31mx2000GDL: Game Development Language.
A domain specific language designed for making it fun, simple to write games and without compromises. Based on libgdx
https://github.com/damn/gdl
Work in progress, would welcome feedback and contributions.#2023-07-2413:31oliyHi all, martian 0.1.25 has been released.
martian is a library providing abstraction over your http client, supporting Swagger, OpenAPI and your own custom definitions.
https://github.com/oliyh/martian
This release adds:
• The ability to generate urls with their querystrings https://github.com/oliyh/martian/issues/171
• Support for date-time formats https://github.com/oliyh/martian/issues/149
This release improves:
• VCR playback terminates stack when it returns a response https://github.com/oliyh/martian/issues/181
#2023-07-2419:27Dustin GetzI'm presenting Electric at London Clojurians zoom meetup tomorrow - https://www.meetup.com/London-Clojurians/events/294436947/#2023-07-2420:21Bobbi Towers[WIP] Clojure interpreter in JavaScript based on mal (Make-a-Lisp), built into a platform for solving Exercism exercises: https://github.com/bobbicodes/exercism-express/#2023-07-2513:43Noah Bogarthttps://cljdoc.org/d/io.github.noahtheduke/splint/1.10.0/doc/home: a linter focused on style and code shape
v1.10.0 - after 7 weeks, this one is a doozy!
• The big feature here is adding support to run splint without specifying paths. Now Splint will read the deps.edn or project.clj file in the current directory and check the paths in the base definition as well as :dev and :test aliases/profiles if no path argument is given.
• The second big change is moving from the old DSL to the new pangloss/pattern inspired DSL. More flexible, more usable, overall better. (Thanks to @darrickw for his patience and support in talking to me about this over in #C05BLM27PUM.) If you've written custom rules, please reach out and I will rewrite them for you to use the new system to ease the transition.
• The third is adding performance rules. These are off by default and are designed for those who want to pinch their cycles. Some affect common code (`get-in`) and some are much more rare (`satisfies`), but they're all designed to help you be mindful of slower paths.
Follow-up in #C04SCGV2ATX#2023-07-2712:14weavejesterhttps://github.com/weavejester/cljfmt 0.11.0 has been released. This release makes a small breaking change to how indents are configured, and adds a #re data reader to edn configurations.#2023-07-2713:57borkdudeNice. Still works in #CLX41ASCS too :)
$ bb -Sdeps '{:deps {dev.weavejester/cljfmt {:mvn/version "0.11.0"}}}' -m cljfmt.main fix src
Reformatted src/test/clojure/clojure/tools/build/tasks/test_delete.clj
Reformatted src/test/clojure/clojure/tools/build/tasks/test_javac.clj
Reformatted src/test/clojure/clojure/tools/build/tasks/test_write_file.clj
Reformatted src/test/clojure/clojure/tools/build/tasks/test_process.clj#2023-07-2714:11Ingy döt NetHere's a whole lot of Clojure (and 900+ other languages) code: https://github.com/acmeism/RosettaCodeData/tree/main/Lang/Clojure
$ rcd-samples-per-lang | grep -E '(Clojure|Total)'
000935 Clojure
112736 Total
https://github.com/acmeism/RosettaCodeData is an effort I started 10 years ago.
Last month I rewrote the tooling (for this talk https://www.youtube.com/watch?v=Go7mYDCoTvk) and now can update the repo on a regular schedule.#2023-07-2714:24didibusIs that the same as https://rosettacode.org ?#2023-07-2715:50Ingy döt Net@U0K064KQV https://github.com/acmeism/RosettaCodeData#rosettacode-data-project 🙂#2023-07-2715:51Ingy döt NetIt's all of http://RosettaCode.org programs put into files in one repo, so you can get it all and run the code right away without having to find and copy it from a wiki site.#2023-07-2715:52Ingy döt NetThe repo is just the output of a program I run once a week. https://github.com/acmeism/RosettaCodeData#tools#2023-07-2717:43didibusAh ok, cool. At first I thought it was literally the website code. But I get it now, convenient, cause I love RosettaCode, so now I can pull it all down.#2023-07-2714:27Asko Nōmmhttps://github.com/askonomm/ruuter has been released. Ruuter is a zero-dependency, system-agnostic Router for CLJ, CLJS, BB and NBB projects.
• Fixes an issue where if used with middlewares (like Ring), or really anything that passes a :params key from outside of Ruuter in the request, Ruuter overwrites the :params key with its own parameterization. It now does a deep merge instead, with the outside parameters having priority. This means that Ruuter parameters will remain unless overwritten, and should co-exist with outside parameters nicely. https://github.com/askonomm/ruuter/issues/6.
• Some tests were added and other tests were improved.#2023-07-2716:25mx2000https://github.com/damn/x.x - A Clojure Entity Component System working on plain atoms, maps and keywords. (Work in Progress)#2023-07-2809:02AkizWhen do you use this?#2023-07-2809:26mx2000Such systems are used in games.
We can define component-systems like tick, render, create,destroy, on-stunned, on-position-changed etc. and define behaviour for our components like animation, movement, ai, etc.#2023-07-2818:36oliyElon Musk called, he wants to talk to you about the name :)#2023-07-2818:41mx2000He didn't call yet. He will call when x.x has more users than twitter#2023-07-2818:42mx2000Maybe I'll call it X.x.x.X then#2023-07-2818:43mx2000Actually we should rename clojure to increase adoption!#2023-07-2822:14Alex Miller (Clojure team)⚠️⚠️⚠️ we are doing some infrastructure work on http://clojure.org this weekend. There may be periods of unavailability for http://clojure.org subdomains, including http://download.clojure.org which hosts CLI download archives.#2023-07-3116:13R.A. Porter@U064X3EF3 It looks like this is ongoing. Do you have a timeframe for availability?#2023-07-3116:30Alex Miller (Clojure team)just waiting on dns propagation#2023-07-3116:30Alex Miller (Clojure team)what domain and where are you located?#2023-07-3116:32R.A. PorterI’m in Arizona, I think company VPN is NYC. My bigger problem is that CircleCI can’t currently hit the download subdomain.#2023-07-3116:32Alex Miller (Clojure team)yeah, the cnames are being really slow to propagate#2023-07-3116:34Alex Miller (Clojure team)https://www.whatsmydns.net/#CNAME/download.clojure.org#2023-07-3117:13favilaI’m also finding that circleci doesn’t resolve http://downloads.clojure.org. It also appears to have the old http://clojure.org record#2023-07-3117:30Filipe Augusto da Luz LemosHi guys, I’m getting this error on Ohio:
Exception in thread "main" java.lang.Exception: Error: Cannot download Clojure tools. Please download manually from to /root/.deps.clj/1.11.1.1257/ClojureTools/tools.zip
Could this be related to the update? (Just want to confirm)#2023-07-3117:59Alex Miller (Clojure team)yes, same cause#2023-07-3117:59Alex Miller (Clojure team)not really anything I can do to speed it along other than wait#2023-07-3118:34Juarez Aires Sampaio FilhoIs the behavior shown here expected? Some servers keep alternating between green and red.
https://www.whatsmydns.net/#CNAME/download.clojure.org#2023-07-3118:35Alex Miller (Clojure team)I mostly don't believe what I see there, especially for cnames#2023-07-3118:35Alex Miller (Clojure team)having looked at other dns propagation checkers, I've gotten much different pictures throughout#2023-07-3118:36Alex Miller (Clojure team)lot of caches out there in the world#2023-07-3118:52Alex Miller (Clojure team)If you’re experiencing issues with CircleCI there might be some dns cache they could update, don’t know#2023-07-3120:53Alex Miller (Clojure team)are people still seeing issues or has it abated?#2023-07-3120:54R.A. PorterMy CircleCI build worked. I’m still having trouble locally, but I probably just need to clear my dns cache again.#2023-07-3120:56R.A. PorterWell. No. Locally, both on and off my company’s VPN, I still get an access denied response from http://download.clojure.org. :thinking_face:#2023-07-3121:04ennstill seeing it with Circle#2023-08-0105:03seancorfieldJust got reported in https://clojurians.slack.com/archives/CLX41ASCS/p1690865884018859 -- and some places on whatsmydns still show ❌#2023-07-2913:57emccueI spent the last two days modularizing and repackaging google's guava. I wouldn't trust any of this until/unless I port unit tests, but if you have a clojure project that for whatever reason has a dependence on guava that you wish wasn't on all of guava, this might be useful
https://github.com/bowbahdoe/guava-base https://github.com/bowbahdoe/guava-primitives https://github.com/bowbahdoe/guava-escape https://github.com/bowbahdoe/guava-math https://github.com/bowbahdoe/guava-collect https://github.com/bowbahdoe/guava-xml https://github.com/bowbahdoe/guava-html https://github.com/bowbahdoe/guava-hash https://github.com/bowbahdoe/guava-graph https://github.com/bowbahdoe/guava-io https://github.com/bowbahdoe/guava-net https://github.com/bowbahdoe/guava-reflect https://github.com/bowbahdoe/guava-concurrent#2023-07-2915:01Noah BogartThis is quite a pile of links. Maybe put the full list nicely formatted in the base package?#2023-07-2915:01Noah BogartLooks great tho, I’m excited to read through it#2023-07-2920:25emccue> Maybe put the full list nicely formatted in the base package?
Yeah... I got to get the https://github.com/bowbahdoe/guava package deploying. That would be the place to put it but because there are no source files the javadoc plugin doesn't want to do it. Its a bummer#2023-07-3116:39emccuehttps://github.com/bowbahdoe/guava#2023-07-3116:39emccuemade that index#2023-07-3117:26Noah BogartExcellent, thank you#2023-08-2415:03emccueI have since made these forks mechanically derived from guava (i.e. a script does it and I don't do it by hand) so they should be more reliable than not so long as I keep relatively up to date#2023-07-2923:45bschragFirst announced release---v1.1.1: https://github.com/bobschrag/token-matcher/
Integrates companion project clolog to express and reason about enumerated kinds and subkinds allowed as bindings for +vars---kind-linked matcher template variables.#2023-07-2923:46bschragCompanion project: https://github.com/bobschrag/clolog#2023-07-3012:47julienvincenthttps://github.com/julienvincent/nvim-paredit - A new Paredit implementation for Neovim!
This is a new https://paredit.org implementation for Neovim, built using Treesitter.
After getting setup with https://github.com/guns/vim-sexp I quickly became annoyed with how the cursor would always be placed on the moved form's edge when slurping/barfing. A colleague (@armed) had been experimenting with reimplementing paredit with Treesitter and we decided to flesh it out into a somewhat complete implementation. This is the result.
Right now this only has support for clojure but we do intend to have support for other languages.
It's still pretty beta, but feel free to give it a try!#2023-07-3016:34Noah BogartThis is super cool! It looks like the default keybinds mirror tpope's https://github.com/tpope/vim-sexp-mappings-for-regular-people, but I haven't checked them all. Did you diverge anywhere?#2023-07-3016:42armedWe are not trying to completely mirror vim-sexp, just basic splurpage/barfage and motions. Everything else can be extended through public api#2023-07-3016:44armedFor example autopairs functionality is not part of a plugin, people may use third party plugins for that. #2023-07-3017:08julienvincent@UEENNMX0T yes the bindings were based off of tpopes plugin! I can't remember off-hand if we diverged, but I'd be happy to change the defaults to match if we did#2023-07-3017:09Noah BogartNo worries, purely curious. I'll switch and take this for a spin! vim-sexp doesn't support treesitter-only syntax highlighting, so i'm excited to try this out#2023-07-3017:22julienvincentAwesome! Let us know if you run into any issues :)#2023-08-0209:12geraldodevHow nvim-paredit compares to https://github.com/kovisoft/paredit ?#2023-08-0210:24armed@U0516053R
Good question. I didn’t use that plugin, here is a few differences I noticed:
• nvim-paredit is neovim only and written in lua
• nvim-paredit is not using custom parsing, it is build around treesitter API
• no opinionated keymaps, but have some defaults (which I don’t use personally)
• no autobalance (yet? or maybe never)
• is clojure only at the moment, but supports lang extensions, clojure itself is a builtin extension
• beta software, some things is about to change in the future#2023-07-3014:49nonrecursivehttps://github.com/donut-party/email
This library provides a helper for constructing emails independent of whatever email service you use. Features include:
• Use text and HTML email templates for email body
• Use text template for email subject
• Set global options (like :from) and easily override those options
• Parameterizes the email sending function so you can replace it with a mock in tests
• Parameterizes template rendering function so you can use something other than selmer if you want#2023-08-0116:20borkdudehttps://github.com/squint-cljs v0.1.15, ClojureScript syntax to JS compiler
This version adds defclass, directly inspired by shadow-cljs to prevent fragmentation in the CLJS ecosystem
https://github.com/squint-cljs/squint/blob/main/doc/defclass.md
See screenshot of how to use it with lit!#2023-08-0211:17borkdudehttps://github.com/borkdude/jet: CLI to transform between JSON, EDN, YAML and Transit using Clojure.
Releases since last announcement:
0.7.27 (2023-08-02)
• https://github.com/borkdude/jet/issues/137: Added missing functions from clojure v1.11: update-keys, update-vals, parse-long, parse-double, parse-boolean and parse-uuid
• https://github.com/borkdude/jet/issues/148: restore default EDN tagged-literal data reader
• https://github.com/borkdude/jet/issues/143: Add named cases for convenience to the --keywordize / -k switch: key-fn | :kebab-case | :snake_case | :PascalCase | :camelCase | :Camel_Snake_Case | :SCREAMING_SNAKE_CASE | :HTTP-Header-Case
0.6.26 (2023-07-03)
• https://github.com/borkdude/jet/issues/134: From YAML, --keywordize [<key-fn>] now uses the provided key-fn.
0.5.25 (2023-04-26)
• https://github.com/borkdude/jet/issues/130: --no-commas option strips commas from EDN. Only works with uncolored output.
0.4.24 (2023-04-09)
• https://github.com/borkdude/jet/issues/127: support linux aarch64 binary
#2023-08-0214:07lreadhttps://github.com/clj-easy/graal-build-time 1.0.5 - Initialize Clojure classes at build time with GraalVM native-image
We've https://github.com/clj-easy/graal-build-time/blob/main/CHANGELOG.md#v105, after upgrading, you'll need to add --features=clj_easy.graal_build_time.InitClojureClasses to your native-image command line.
From your good friends at https://github.com/clj-easy.#2023-08-0317:20mx2000https://github.com/damn/Cyber-Dungeon-Quest#2023-08-0320:42jpmonettasnice, I think you need to push to Clojars nstools 0.2.5, the latest one deployed seems to be 0.2.4#2023-08-0407:35mx2000Thanks I used a github commit dependency now. Should be fixed.#2023-08-0401:36vlad_pohhttps://github.com/kbosompem/bb-excel 0.0.5 Use https://www.babashka.org/ to extract data from Excel Spreadsheets!
• #2 Fixing a problem where whenever range has 0 in it the parse-range fails to correctly locate the rows.
Thanks @hjbolide for the bug fix.#2023-08-0820:30Kent BullSweet! This is handy.#2023-08-0411:14Dotan Schreiberhttps://github.com/s-doti/ginfer
A graph inference library.
There are any number of disclaimers I might have added, but I won't. Instead, I'll just say - I'm looking for feedback, and would be more than happy to discuss the more in-depth concepts and ideas this is based on, if any of it happens to be your cup of tea 😉 ... I do mean it in the broader sense, this isn't really just about graph inference per se#2023-08-0414:28MaxHow does this differ from rules engines like https://github.com/oakes/odoyle-rules and https://github.com/cerner/clara-rules?#2023-08-0416:20Dotan SchreiberI actually don't think Ginfer qualifies as a rules engine, definitely not at the level that both of these technologies do.
Clara/Odoyle invite you to express your logic via their specific lingo, and their focus would then be on minimizing computations and producing the fastest answer, I imagine. Ginfer doesn't require that level of commitment - you still express your logic as you otherwise would, as clojure fns, at the granularity of your business entities and their attributes. You then just declare the dependencies between those attributes, and Ginfer takes care of when your logic should be invoked, as well as pulling and pushing data as needed (either from the world, or to/from your storage solution).
Ginfer is agnostic to your data model as well. It is built with the following case in mind: your data consists of millions of business entities, of different types, with their intrinsic data attributes having elaborate dependencies on one another. An event comes in, and changes a single value of a single such entity and attribute, leading to a ripple effect involving dozens/hundreds/thousands of more changes all around; or, the user would like to evaluate some attribute per a specific entity, which requires a similar order of magnitude of evaluations all around. Ginfer aims to help you in pulling/pushing the relevant data when needed, and running the relevant logic, to make all this happen. It is the glue between your logic, your data model, and the world.#2023-08-0417:07MaxDo you have some specific applications in mind where you think Ginfer might be valuable? I’m having a hard time determining when to apply it from having read the readme #2023-08-0419:14Dotan SchreiberWell, Ginfer was originally conceived for a EASM product (external attack-surface mapping), cyber-security. This requires mapping of orgs and their relations, and moving to their exposed assets on the internet, e.g. ips, domains, websites, certs and what have you. All of these are business entities, and there's a high level of interconnectivity between them, as far as the logic that applies to calculating their attributes.
Ginfer should be applicable to businesses in many other domains though, just as well, given similar requirements in nature.
I imagine Ginfer as being closer, in philosophy, to knowledge graphs, rather than engine rules; but as an added layer, and not as a standalone solution on the side. It wants to support the operations front, not just development aspects. So it can be executed eagerly or lazily, async or blocking, it can pause/resume, it can be used to aggregate data from multiple data sources, it can support disaster recovery scenarios, etc.#2023-08-0421:11Darrick WiebeHow does this compare to a propagator model? Have you looked at https://dspace.mit.edu/handle/1721.1/44215?#2023-08-0421:31MaxI also see a lot of similarity with reasoners, such as datascript with rules#2023-08-0501:34Cora (she/her)it would help a lot if the first bits in the readme explained what you meant by a graph inference library. diagrams would be 🔥 #2023-08-0501:37Cora (she/her)this looks really interesting, fwiw#2023-08-0501:39Cora (she/her)is graph inference a concept I just don't know about? that might be the case and why I'm suggesting that, so take that with a grain of salt I guess#2023-08-0501:46Darrick WiebeI've worked with graphs for years and haven't heard the term used this way.#2023-08-0501:47Cora (she/her)ahh, ok, well, new terms for new things are great 😊 #2023-08-0501:48Darrick WiebeI can't decide if it's a graph-based reporting reporting engine, if it's updating the graph, if it's doing something like a BSP algo or something like a propagator. But I haven't tried to read the source. Hoping for clarity from the creator first...#2023-08-0501:49Cora (she/her)it sounds spreadsheet-ish to me? but eventually consistent? or maybe I'm misunderstanding what it is#2023-08-0501:50Darrick Wiebe🤷#2023-08-0508:04Dotan SchreiberHa ha, language/communication has always been the biggest challenge by far to solve, with me at least 😉 It is so hard to be concrete and convey what I have in mind with the needed clarity.. I'll address all questions/comments as best I can!#2023-08-0508:30Dotan SchreiberRe @U01D37REZHP’s Propagator model - I think Ginfer incorporates a very similar concept, if I'm understanding the reference correctly. The user of Ginfer in effect creates their logic as composable logical units which take in multiple values and propagate their calculated values in turn. The cells mentioned in the reference, in Ginfer's case, are bits of data in the user data-model, persisted on the user's external storage solution (in whatever format). It's hard to wrap my head around this propagator model, that's new to me, but I think Ginfer actually has an abstract level consisting of 3 main propagators - one for each of the update/notify/eval steps - and then these become concrete at the user level, where the user declares their model attributes along with their logic and dependencies.
Anyhow, if indeed similar, only in concept, my implementation probably doesn't make that similarity very apparent at all.#2023-08-0508:44Dotan Schreiber@U01EB0V3H39, yes, I also see the similarity with datascript+rules, though Ginfer maintains its state out of mem. Datomic has built-in mechanics that allow for logic propagation, I think a Ginfer-based solution could possibly be based on Datomic just the same. But with different controls - like, Ginfer's propagation could be executed lazily, or paused/resumed, etc.
One of the libraries Ginfer is based on - https://github.com/s-doti/sepl - converts Ginfer's update-notify-eval loop execution into data, that's where the level of control is gained.#2023-08-0509:00Dotan Schreiber@U02N27RK69K lol, 'graph inference' is the term I've been holding in my head for quite some time, and I forget where I came up with it in the first place.. I'll update my readme along these lines: graph inference here hints of the process by which interconnected and interdependent bits of data are updated in sequence. I use 'graph' to acknowledge the interconnectivity between values, and 'inference' for them being interdependent, meaning a change to some value leads to a propagating ripple effect which ends in a change to another value (and potentially a whole lot of values in between).#2023-08-0509:15Dotan SchreiberAlso, not a graph-based reporting engine, and not based on BSP algo (unless what I'm doing is in fact reducible to BSP? I wouldn't know). In essence, I've only incorporated a very basic and naive approach that keeps on iterating through a update-notify-eval sequence for as long as updated values can be inferred, anywhere (data stability is assumed). There are no optimizations, no branch-skipping, no events-deferring/collapsing, at this point.
If you have the stamina, I've created baby versions to deliver just the gist in short, they're really tiny (and yet I've incorporated visual diagrams in the readme!): https://github.com/s-doti/baby-ginfer#2023-08-0509:17Dotan SchreiberI really appreciate you helping me examine all these concepts I try squeeze out of my head 🙂#2023-08-0516:56Darrick WiebeI appreciate that you've made this flexible to use a variety of back ends, etc, but I think it'd be better to try to simplify things for people to understand by keeping the examples as simple and concrete as possible. Also by showing the entire setup in your examples. In the baby-ginfer repo, there is a code block that uses a bunch of symbols that are not defined which appear to be referring to a global database of some sort which is also not defined.#2023-08-0516:57Darrick WiebeIn your examples, you're using :refer :all , which can be convenient but has the disadvantage that we can't know where anything comes from without searching.#2023-08-0517:31Dotan SchreiberGood feedback, I'll aim to incorporate all points right away. @U01D37REZHP what do you mean by 'entire setup'? Call out main api alongside the complete set of options explained in readme maybe?#2023-08-0517:41Cora (she/her)I think Darrick means that it should start explicit and small so people can understand what this is, then build on that simple example to show different options and ways of doing things#2023-08-0517:43Cora (she/her)to an audience that has no idea what this is, the flexibility and advanced options just obscure the heart of what you're trying to convey#2023-08-0517:56Cora (she/her)you have the curse of knowledge, you know enough about the software that it's hard to know how to begin explaining it, and the things you find exciting about it and are proud of aren't the things a novice audience are interested in (initially)#2023-08-0518:09Cora (she/her)it's like how clojure intros go on and on about simplicity and complecting but novices just want to know how to start a project and do something they've done before so they can learn what's different through use and then they can start understanding what's so simple and what's cool about repl-driven development. the things advanced users find compelling aren't the same as what novices do, and it pays to be aware of that#2023-08-0518:57Dotan SchreiberWow, yes, I see what you're saying guys. I'm gonna ponder a bit about how best to incorporate the needed changes asap. Thanks so much!#2023-08-0622:51Dotan SchreiberI just updated the README for added clarity, or so I hope. Still no visuals I'm afraid. It feels quite long, is it too much?
It would take quite some time to improve the documentation as a whole, but then, the library in general is a long way from mature of course.#2023-08-0701:33Darrick WiebeDefinitely much more comprehensible.#2023-08-0701:33Darrick WiebeDoes this library store the inferences that it makes back into the data source?#2023-08-0701:36Darrick WiebeUsing your example, what happens if I add an employee? Is all data invalidated, or some subset? Would the department head count need to be recalculated from scratch? How does the system know what needs to be recalculated? Same questions for if an employee were removed.#2023-08-0705:07Dotan SchreiberGinfer assumes 0 memory. It requires only the data necessary for a single local calculation to reside in memory (sort of). Everything gets persisted at each step. I should better document 'connectors' somewhere - these are the components responsible for translating data and persisting it in the user external storage solution.
In my examples, a default in-memory connector is used, for demo purposes (implicit).
Performance lost is regained with the internal persistence library - https://github.com/s-doti/persistroids. It adds a read/write-through cache of weak refs, which only gets flushed when gc actually needs to evacuate items from it (or by time/amount of accumulated mutations).#2023-08-0705:16Dotan SchreiberIn my example, adding/removing an employee generally triggers re-calculations from scratch. However, since all data is eagerly persisted, and values that have not changed do not need to be re-evaluated, there's no need to go far to acquire the input data necessary for a re-calculation of head-count for instance. Does that make sense? I'm not sure I manage to explain myself well enough with this.#2023-08-0510:39Ludger SolbachI released version 0.3.0 of Overarch this week. Apart from enhanced documentation with diagrams for the logical data model of Overarch, in this release I added the modelling of concepts for elements not (yet) directly represented in the architecture of the system and a glossary view with markdown export which generates a textual representation of the concepts, actors, systems and containers.
https://github.com/soulspace-org/overarch#2023-08-0612:43Ivar RefsdalI'm pleased to announce a maintenance release of https://github.com/sikt-no/clj-jwt, a library to sign and/or unsign JWTs.
It bumps dependencies to remove some CVEs, and is now also available on Clojars.
Existing users should be able to upgrade without any breakage.
See the https://github.com/sikt-no/clj-jwt/blob/main/CHANGELOG.md#0581---2023-08-05 for full details.#2023-08-0820:32Kent BullExcellent! I just got started using the Buddy libraries though took a look at clj-jwt. I’m glad you are maintaining it now. I’d be glad to give it a try.#2023-08-0613:02ericdalloclojure-lsp Released https://clojure-lsp.io/ https://github.com/clojure-lsp/clojure-lsp/releases/tag/2023.08.06-00.28.06 with lots of fixes and memory usage improvements.
For more information, come to #CPABC1H61#2023-08-0719:53Jakub Holý (HolyJak)Hello! I have finally, after a long wait, released https://github.com/holyjak/fulcro-rad-asami on Clojars as v. 1.0 - an adapter to use the in-memory/on-disk graph database #asami with #fulcro Rapid Application Development webapps. Useful when you want to have a simple, embedded, in-process DB with persistence and datalog-like queries.#2023-08-0823:24Kathleen DavisJust posted - Firefox 116.0 with Custom Formatters https://www.clojuriststogether.org/news/firefox-116.0-release/#2023-08-1014:33slipsetI’m happy to announce version 0.6.2 of https://github.com/clj-commons/clj-ssh
You can find it on Clojars https://clojars.org/org.clj-commons/clj-ssh
Huge thanks to @tiagomlalves for fixing the CircleCI build!#2023-08-1112:12lreadclj-yaml v1.0.27 - YAML encoding and decoding for Clojure
Highlights from the https://github.com/clj-commons/clj-yaml/blob/master/CHANGELOG.adoc#v1027---2023-08-11:
• Added :nesting-depth-limit to parse-string and parse-stream (thanks @neeasade!)
• Added :code-point-limit option to accept bigger documents (thanks @pitalig!)
• Added GraalVM native-image configuration (and tests)
• Bumped SnakeYAML to v2.1
clj-yaml is one of the many projects under the loving care of https://github.com/clj-commons.#2023-08-1117:04Alex Miller (Clojure team)https://github.com/clojure/tools.build v0.9.5 is now available
• java-command - TBUILD-14 Use :jvm-opts from aliases in basis, if provided
• Update to latest deps#2023-08-1407:07Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.11.1.1386 is now available
• No changes in the tool in this release, this is a new configuration to publish releases on https://github.com/clojure/brew-install
• Brew formulae will now use that download location as the primary location, and the prior download archive as a mirror.
• Linux and posix installation instructions at https://clojure.org/guides/install_clojure have been updated.#2023-08-1407:10Alex Miller (Clojure team)Some changes will be desirable on https://github.com/DeLaGuardo/setup-clojure and I've filed an https://github.com/DeLaGuardo/setup-clojure/issues/88 about those (but it will continue to work as is). If you have some other process for obtaining downloads, please note that the github urls will do redirects, so curl needs the -L flag to follow those redirects.#2023-08-1408:16olyIs there a recommended place to get the tar.gz and sha for the download, I know I can get it here https://download.clojure.org/install/clojure-tools-1.11.1.1386.tar.gz but there is no way to list the files https://download.clojure.org/install/ using that url for example, I am not sure where I got the download url from originally or where it is listed ?#2023-08-1408:19Alex Miller (Clojure team)https://github.com/clojure/brew-install/releases/latest will always take you to the latest release files, but not sure if that's fully answering your question#2023-08-1408:21Alex Miller (Clojure team)maybe back up one more step to what you're trying to do (which os/installer, etc)#2023-08-1408:21olyYeah i just found it, I think because it named brew it always throws me, thanks#2023-08-1408:21olyoh I update the packages on solus so need the download and link and changelog each time I get around to pushing an update#2023-08-1408:23Alex Miller (Clojure team)then yeah that's probably the best place to go each time#2023-08-1408:23olyI usually just change the numbers in the link and calculate the sha locally which probably is not ideal in case I ever ended up with a bad copy of the binary#2023-08-1408:24olyokay I will have to try and remember brew is for all platforms, thanks @U064X3EF3#2023-08-1409:52practicalli-johnThanks for the update Alex.
I've update the https://practical.li/clojure/install/clojure-cli/ to reflect these changes.
Successfully updated using the Linux script on Ubuntu and Debian. Thanks again#2023-08-1412:41borkdude@U064X3EF3 Thanks for this. I'll update deps.clj to download from this github releases as well.
Would it be possible to add .sha256 files for each upload so they can be verified after download?#2023-08-1412:43borkdudeI'm doing this in my own Github releases library as well https://github.com/borkdude/gh-release-artifact/blob/4a9a74f0e50e897c45df8cc70684360eb30fce80/src/borkdude/gh_release_artifact/internal.clj#L211-L216 and it helps both myself and package creators for babashka, clj-kondo, to make stuff more robust.
Example: https://github.com/babashka/babashka/releases/tag/v1.3.182#2023-08-1412:46borkdudeAnother question: is it correct that the .zip file has no version? It used to have one#2023-08-1412:47Alex Miller (Clojure team)Yes, I can add the sha file#2023-08-1412:48Alex Miller (Clojure team)Yes on the zip - the install used to copy it to a file without so I got rid of that#2023-08-1412:52borkdudecc @U015879P2F8 on the above too, for #CFN4QDHPS msi#2023-08-1412:53borkdudeand perhaps @UBLU3FQRZ for clj-deps#2023-08-1413:16littleliWill take a look afternoon (CET). zip seems to don't have version in filename but has a version in the url path, so that's already good enough for me (I'll use .tar.gz anyway). Should not be difficult to use brew release location.#2023-08-1416:48seancorfieldWe have an update-clj.sh script that downloads stable.properties and uses the values in that file to decide what version to install, so I ended changing the curl for that to
curl -L -O
and then the download/execute of the posix-install.sh to:
curl -L -O
chmod +x posix-install.sh
./posix-install.sh --prefix .
Does that sound right @U064X3EF3? (it seems to work)#2023-08-1416:49seancorfieldIt was previously
curl -O
and
curl -O
chmod +x posix-install-${version}.sh
./posix-install-${version}.sh --prefix .#2023-08-1416:56Alex Miller (Clojure team)Yep#2023-08-1416:57Alex Miller (Clojure team)Oh wait is that stable.properties right? #2023-08-1417:00Alex Miller (Clojure team)We are not currently publishing that on GitHub, so that should stay the same (but you may not need it)#2023-08-1417:01Alex Miller (Clojure team)Oh, you’re grabbing from the source, not the release, that’s fine#2023-08-1417:03seancorfieldYeah, I wondered what the best approach was since stable.properties and devel.properties are no long in the released stuff...#2023-08-1417:03Alex Miller (Clojure team)If you just want latest stable posix installer you can get that in one step now from the url posted at https://clojure.org/guides/install_clojure#2023-08-1417:03Alex Miller (Clojure team)https://github.com/clojure/brew-install/releases/latest/download/posix-install.sh#2023-08-1417:04seancorfieldOur script lets us install either the stable version or a prerelease, and uses stable.properties to check whether the requested version is stable or not. If it isn't stable, you have to confirm that you really mean to install that version.#2023-08-1417:05seancorfield(so our use case isn't "latest")#2023-08-1412:44practicalli-johnPracticalli Clojure book -https://github.com/practicalli/clojure/releases/tag/2023-08-14
Updates since March 2023 with a continued focus on the Clojure REPL workflow examples and associated tooling#2023-08-1612:50Tamizhvendan SAnnouncing HoneyEQL 1.0
https://www.tamizhvendan.in/blog/announcing-honeyeql-1.0/#2023-08-1613:12sparkofreasonQuick question: does this version now support multi-column primary/foreign keys?#2023-08-1613:19Tamizhvendan SYes @U066LQXPZ - https://github.com/tamizhvendan/honeyeql/blob/master/test/suite.edn#L21#2023-08-1613:43Noah BogartOh this is built on top of HoneySQL, that explains the name. Very cool!#2023-08-1614:34pithylessRE: :eql.mode/lenient - is there something that makes calling list not ergonomic?
(heql/query
db-adapter
{[:actor/actor-id 148]
[:actor/first-name
{(list :actor/films {:order-by [[:film/title :desc]]})
[:film/title]}]})#2023-08-1614:35pithylessAlso, what's the best channel to ask questions about HoneyEQL? I may end up playing more with this - a spiritual successor to walkable sounds encouraging.#2023-08-1616:54seancorfieldI'd be happy to have this discussed and supported in #honeysql and will happily update the channel topic/description etc? (if that seems appropriate -- although #walkable #eql both exist and might be more appropriate?)#2023-08-1618:32Caio CascaesWooow! Congrats people! I love HoneySQL! So "sweet" 🐝#2023-08-1715:14Tamizhvendan S@U05476190
> is there something that makes calling list not ergonomic?
Yes. From my personal experience, it is two things
1. The presence of ( makes it required to use unquote as stated https://cljdoc.org/d/com.github.tamizhvendan/honeyeql/1.0.0/doc/query-syntax#honeyeql-override-2.
2. The usage of explicit list is redundant as the definition of :actor/films itself says it is a list.
#2023-08-1715:16Tamizhvendan S@U05476190
> Also, what's the best channel to ask questions about HoneyEQL?
I just opened up https://github.com/tamizhvendan/honeyeql/discussions. Feel free to drop your comments there, I am happy to help & collaborate.#2023-08-1715:17Tamizhvendan S@U04V70XH6 Thanks for pitching in and providing a proposal. I am less active on Slack. So, I prefer to use https://github.com/tamizhvendan/honeyeql/discussions.#2023-08-1716:13seancorfieldGood to know -- I'm keep an eye out for anyone asking about HoneyEQL and direct them to GH Discussions! It's a cool-looking project.#2023-08-1801:53Tamizhvendan SThank you @U04V70XH6 🙂#2023-08-1622:14ambrosebsAnnouncing Typed Clojure 1.1.1 https://opencollective.com/typedclojure/updates/symbolic-execution
Features drastically improved local type inference:
Before: (map (fn [x :- Int, y :- Int] (+ x y)) [1] [2])
After: (map #(+ %1 %2) [1] [2])
Before: (into [] (map (fn [x :- Int] (inc x)) [1 2])
After: (into [] (map #(inc %)) [1 2])
Under the hood, symbolic execution is used. I wrote a https://github.com/typedclojure/typedclojure/tree/main/example-projects/symbolic-guide#symbolic-execution-in-typed-clojure about how to reason about it.#2023-08-1706:14Karol WójcikGreat improvements! Wondering if it’s possible to return a more friendly error instead of stackoverflow. Is it possible to potentially limit the stack usage to certain degree and throw the error if too much stack is consumed?#2023-08-1713:57ambrosebsYes, great point. This is based on research from around 5 years ago, and in my model I had a limit in the number of times you could symbolically expand. You could then throw an error actually telling the user what annotation to use and where. I will probably port that feature over to the real system https://github.com/frenchy64/lti-model/blob/ddfa52dd94a91221865d18565a27ccf362605ca7/src/lti_model/core.clj#L1524-L1528#2023-08-1623:00jaretHi folks! I am extremely excited be bringing good news to all datomic Datomic users datomic! Curtesy of Nubank's efforts to broaden Datomic adoption and help software engineers solve problems with Datomic. We have just released Datomic local a lightweight, embeddable, and redistributable version of Datomic that utilizes the client api and is perfect for small single process applications! Read our blog post here: https://blog.datomic.com/2023/08/datomic-local-is-released.html.
If you have any questions drop by the #C03RZMDSH channel or reach out on the http://forums.datomic.com!
Cheers!#2023-08-1623:07MaxInteresting that it exposes the client api but is embedded, I thought the client api was for when the peers aren’t embedded #2023-08-1623:10phillhttps://docs.datomic.com/client-api/datomic.client.api.html "datomic.client.api: Synchronous client library for interacting with Datomic."#2023-08-1700:46Noah BogartThis is so cool#2023-08-1705:47Christian JohansenIt looks like the client API does not have the entity function, is that right?#2023-08-1708:37agigaoAwesome! I think recent changes is a huge leap towards adaptation of Datomic in the Clojure ecosystem. Now Clojurians can we can walk on both legs.#2023-08-1912:56robert-stuttafordi love_love_LOVE that this has happened, but i wonder why not the peer api, @U1QJACBUM?#2023-08-1722:05weavejesterRing 1.11.0-alpha1 is now available. It's an experimental release with the following features:
• WebSocket support added
• Jetty adapter updated to 11.0
• Multipart middleware dependency on Java servlets removed#2023-08-1722:36seancorfieldVery cool to see this! I am pretty surprised given your comments in the GH issue about Jetty 10/11 support -- it sounded like you might leave the whole updated adapter thing to others in the community?#2023-08-1722:38seancorfieldDo you have links to more information about how the WebSocket stuff works @U0BKWMG5B? I'm wondering how different it is to the sunng87 adapter (since we switched to that some time back when it seemed the core Ring adapter wasn't going to be updated beyond Jetty 9).#2023-08-1723:56hifumi123IIRC the java 1.8 support was valid in the past when it was the majority of use in production. If we can trust the Clojure survey results this year and last year, java 1.8 has been a minority for a while now. It seems like the majority of Clojure users are on either 11 or 17, which is good news#2023-08-1808:46weavejester@U04V70XH6 The main sticking point for supporting Jetty 10/11 was the requirement for Java 11, as Clojure itself supports back to Java 8. However, with FileUpload 2.0.0 moving to Java 11 as well, and Jetty 9.4 being on life-support, it finally tipped the scales in favour of an update. Another factor was that at the time the issue was raised, Java 11 was 2.5 years old, and now it's 5 years old.#2023-08-1808:52weavejesterAs for the websocket information, I'm going to be writing an updated specification today, but the interface is almost the same as the one written up for the Ring 2.0 spec (https://github.com/ring-clojure/ring/blob/2.0/SPEC-2.md#3-websockets), except that I decided to include methods for ping/pong as well. Initially I wasn't sure how many implementations supported them, and I wanted to support the lowest common denominator, but after looking I was unable to find any existing implementation that lacked support for ping/pong.#2023-08-1815:30weavejesterI've added a wiki page that explains the websocket syntax: https://github.com/ring-clojure/ring/wiki/WebSockets#2023-08-1812:24ericdalloclojure-lsp Announcing https://github.com/clojure-lsp/clojure-lsp-intellij 0.1.4 alpha! A free, open source Intellij plugin to support LSP via clojure-lsp, for more info check the rationale https://github.com/clojure-lsp/clojure-lsp-intellij#rationale.
Fun fact: The plugin is made mostly in Clojure clojure-spin
It's been some time people ask for https://clojure-lsp.io/ support in IntelliJ to use the same features, formatting and lint settings than other editors have when using clojure-lsp, it was very hard to make IntelliJ's api work with LSP but thanks to some other OSS plugins like ClojureKit and ClojureExtras (thanks @brcosta), this is finally happening! 🎉 clojure-lsp
There's still a lot to do though and the plugin is in alpha stage with basic LSP support yet, but soon more features will be added.
Any contribution is very welcome, issues, testing, sponsorship, pull requests, there are even https://github.com/clojure-lsp/clojure-lsp-intellij/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22! opensource#2023-08-1813:06Noah BogartHow does it work if we have both Cursive and clojure-lsp running? Should we stop using clojure-extras if we're using this?#2023-08-1813:16ikitommiThis is so good news.#2023-08-1813:25ericdallo@UEENNMX0T unfortunately, that doesn't work with cursive, more context https://clojurians.slack.com/archives/C04CAKAGADU/p1690147553580799, but I'd say the static analysis features it provides should be better than clojure extras as will use clojure-lsp which has all kondo integration and more like unused-public-var linter and clj-depend integration.#2023-08-1816:26Kathleen DavisClojurists Together is excited to announce the 8 projects we'll be funding for Q3 2023. Congratulations all! https://www.clojuriststogether.org/news/q3-2023-funding-announcement/#2023-08-1817:38phronmophobicAnnouncing https://github.com/phronmophobic/llama.cljhttps://github.com/phronmophobic/llama.clj: Run LLMs locally. A clojure wrapper for llama.cpp.#2023-08-1818:43lukaszIncredible timing, yesterday I was researching java bindings for llama.cpp :-)#2023-08-1818:46phronmophobicCome join us in #C054XC5JVDZ!#2023-08-1819:00Rupert (All Street)Thanks for putting the llama.clj library together and congrats on the release @U7RJTCH6J! I've been using your early versions of llama.clj for a few weeks and its been fantastic. Here are a few of my observations so far:
The library has very low overhead - so the performance is on par with llama.cpp - which is one of the faster LLM libraries out there. There was no python to setup which simplified the setup significantly.
Llama.clj works with Nvidia GPUs and Apple Silicon etc - but also works to a certain extent with just an x86 CPU too (around 5 tokens/second on an oldish AMD CPU) which can work for certain usecases.
Having an LLM available as a library in Clojure really changes how you tackle programming problems since you can now delegate tasks to the LLM with no dependency on third party APIs (so no credit card needed or managing secret API credentials etc).
Look forward to expanding my usage of it over time!#2023-08-1819:04lukaszI must be doing something wrong:
• I've added the precompiled lib to deps.edn
• started the repl, and (require '[com.phronemophobic.llama :as llama]) and I'm getting a class not found error think_beret #2023-08-1819:06Rupert (All Street)There’s at least two libs to add to your deps Edn I think.#2023-08-1819:06lukaszoh, let me have a look#2023-08-1819:07lukaszduh, I was missing the clj-lama lib facepalm#2023-08-1819:08phronmophobicLet me know if there’s an edit to the Readme that might make things more clear!#2023-08-1819:09lukaszYes, I think I just assumed that using precompiled native dependencies will pull in the main lib#2023-08-1819:13phronmophobicnative libs are kind of a pain and I still haven’t figure out a way to make them easy to include.#2023-08-1819:19lukaszI that's kinda expected, given the nature of the library - when I worked with CoreNLP it worked in the same way, although there was some Maven magic they pulled off to make default installation more usable#2023-08-1819:26lukasz@U7RJTCH6J Awwwright, got it working in the REPL - I can open a PR with small tweaks to the readme if you want#2023-08-1819:36phronmophobicYea, that would be great!#2023-08-1819:54lukaszDone!#2023-08-2212:15johnBravo!#2023-08-1821:42Mark WardleAnnouncing https://github.com/wardle/nhs-number A (very simple) UK National Health Service number library, for validation, normalisation, formatting and generation. I've extracted out this functionality from a different project, and because of its very small size and simplicity, I hope it might be a useful demonstration of building a Clojure/Script library using deps.edn, tools.build, tests (clj and cljs - via shadow cljs), and associated GitHub actions for running those tests, generating coverage data and releasing to Clojars on a tag to main branch. It includes the use of test.check for exercising functions, and publication of test coverage to codecov.#2023-08-2010:46vemvAnother month, another nvd-clojure release (https://github.com/rm-hull/nvd-clojure/blob/v3.4.0/CHANGELOG.md#changes-from-330-to-340) upgrading its database.
nvd-clojure is a simple, tooling-agnostic security checker that, as of lately, can be configured with an .edn file.
Enjoy!#2023-08-2113:18tcrawleyClojars now supports requiring two-factor auth to be on for a user for that user to be able to deploy a project. The setting is controlled at the group level, and is off by default. See https://github.com/clojars/clojars-web/issues/823#issuecomment-1676044918 and https://github.com/clojars/clojars-web/wiki/About#can-i-require-group-members-to-have-mfa-two-factor-auth-enabled-to-deploy.#2023-08-2208:14danielszHello everyone,
I'm happy to announce the https://github.com/danielsz/cohere-clojure released under the MIT License.
Cohere is a OpenAI contender with a focus on the enterprise and developer-friendliness. Also with a more relaxed free trial policy (non-expiring API key). My unofficial port of the SDK allows to execute tasks not possible via the REST API alone. Please share and enjoy!#2023-08-2212:28borkdudehttps://github.com/babashka/babashka: Native, fast starting Clojure interpreter for scripting
1.3.183 (2023-08-22)
• https://github.com/babashka/babashka/issues/1592: expose sci.core in babashka
• https://github.com/babashka/babashka/issues/1596: Fix clojure.java.browse/browse-url truncates URLs with multiple query parameters on Windows
• https://github.com/babashka/babashka/issues/1599: propagate error from run when task does not exist
• Bump clj-yaml to 1.0.27
• https://github.com/babashka/babashka/issues/1604: throw FileNotFoundException when requiring namespace whose file cannot be found (as JVM Clojure does)
• Bump integrant CI tests
• https://github.com/babashka/babashka/issues/1600: use pagesize of 64K on linux aarch64, so it works on Asahi linux
• Expose selmer.parser/resolve-arg
• https://github.com/babashka/babashka/issues/1610: expose babashka.http-client.websocket namespace
• Bump babashka.http-client to 0.4.14
• https://github.com/babashka/babashka/issues/1568: warn when task overrides built-in command
gratitude babashka#2023-08-2213:25borkdudeAlso published 1.3.184 since 183's deps.clj had some debug output which could mess with scripts that rely on stdout#2023-08-2213:57wilkerlucio[com.wsscode/pathom3 "2023.08.22-alpha"] is out!
This release includes some general improvements and a few breaking changes, most notably is the one related to placeholder nodes, which now won't add data to the children by default. This change is important because in case the user wants to have some custom params support, before this change it would also add the data down, which might be undesirable. There is a new plugin to add the placeholders data back for the ones that are using the previous feature.
Changes on this version:
• BREAKING: ::p.error/missing-output is now converged to ::p.error/attribute-missing (issue #149)
• BREAKING: Placeholders won't override entity data via params by default (issue #187)
• New pbip/placeholder-data-params plugin to get back the placeholder entity data behavior
• Mutation not found error goes through ::pcr/wrap-mutate, allowing the user to capture and transform the not found error case
• Remove Insufficient data calling resolver ... error due to problematic behavior with optionals (issue #192)
• Improve runner error messages, elide at path part of the message when at root
• Fix process-one return value when its false (previously it would return nil instead of false) (issue #195)
• Include failing key on smart map errors
• Support applyTo on resolvers and mutations (issue #203)
https://clojars.org/com.wsscode/pathom3#2023-08-2214:18chrisnhttps://github.com/techascent/tech.ml.dataset is out.
TMD is an in-memory columnar data processing system similar to pandas or R's dplyr. If none of that makes sense to you then think of a very very optimized pathway for dealing with sequences of maps.
• all the research from ham-fisted that applies has been moved up through the libraries with special attention to reduction as the primary pathway so for instance columns now have a very optimized reduction pathway.
• many, many issues fixed.
• many small tweaks here and there for performance.
I know several of you have been waiting for 7 to come out of beta -- well, its out and we won't be changing API's any time soon 🙂.
Enjoy 🙂#2023-08-2214:19otfromthis is great news. Thanks!
(goes to update all his deps.edn)#2023-08-2222:06cch1I’m open-sourcing https://github.com/recbus/caribou, a migration tool for Datomic. It has been tested against Datomic Cloud and Datomic
Local (formerly dev-local) in varying conditions for the past six months. It is intended to work against Datomic Pro/On-Prem as well, but this capability
has not yet been tested.
Caribou’s tenets are that migrations are arbitrary transactions best expressed as a dependency graph and that the only reliable source of history for
migrations is the database itself.
At Sun Tribe Trading, we use Caribou for ensuring databases are “shaped” correctly before our application code can see it. Shaping involves
arbitrary Datomic transactions including schema addition, seed data additions and data corrections. In addition to managing the ongoing evolution
of our production database, Caribou is particularly useful for migrating in-memory test databases.#2023-08-2222:57jasonjcknoverall this looks excellent, i like all the design decisions #2023-08-2222:57cch1Let’s move this conversation to the posting in #C03RZMDSH since I think it’s more relevant there.#2023-08-2307:51pesterhazyThis is random but our in-house migration tool at Pitch is also called caribou 😄#2023-08-2312:35cch1LOL… the connection is kinda obvious to the word migration. I only hope your tool is not for Datomic!#2023-09-1420:25Ben Grabow@U0698L2BU what's the recommended way of incorporating Caribou into a project re: dependency fetching? Have you published it to any public Maven repo?#2023-09-1420:27cch1I have not published to maven. I suggest using the git coordinates features of Clojure CLI.#2023-08-2513:30Howon LeeReleasing https://github.com/howonlee/mertonon. Mertonon is a neural network budget for organizations. Basically the neural network just allocates your budget for you, given a political picture of your organization that you enter. Because of this, it's neural but not AI. Lots of accounting stuff and a whole economic theory bundled in is coming. Noncapitalist mode also coming. Theoretically open core but currently entirely open source, enterprise edition with stuff coming.
My other dev buddies found the readme a bag of laughs even if they didn't really care about organizational budgeting, so that's a thing#2023-08-2514:42Moritz Reinhardfwiw I tried to play around with the standalone jar version by following docs/setup.md, but it ignored the db username env var and instead tried to connect with my linux username (`db.clj:18` appears in the stacktrace).#2023-08-2514:43Howon Leethanks, I'll get on it#2023-08-2515:04respatializedtime to get into Stafford Beer mindset#2023-08-2515:05Howon LeeI read his books. he got that old norbert wiener energy w/ the hierarchical algedonic learning bit#2023-08-2515:30Moritz Reinhardit must be some jdbc.next issue, passing {:jdbcUrl jdbc:} instead of the config spec in db.clj and migrations.clj works flawlessly.#2023-08-2515:31Howon Leeyeah, I'm going to shove that in after breakfast. I could not repro on my mac box but could on my amazon linux box#2023-08-2515:50Howon Leefix on master, although I plan to only cut releases on thursdays#2023-08-2515:58Howon Leerespatialized is referencing project cybersyn, by the way, https://en.wikipedia.org/wiki/Project_Cybersyn - stafford beer tried this in the 70's, got a country (chile) to adopt it, richard nixon was pissed, supported pinochet who had the president surrounded by death squads holed up in the mansion until he killed himself, exiled beer, tortured and exiled the chilean dude who interfaced w/ beer and the chileans (cff flores, who much later did a thing trying to get peeps to do business conferences in world of warcraft...)#2023-08-2516:00Howon LeeI'm not too impressed by the underlying algorithmic content of beer's ideas, but that's because you shouldn't be overly impressed by any 1970's AI work, to be honest. it's closer to the connectionist point of view than most, i guess, but he neglected the importance of distributed representations. but nobody who wasn't a weenie was really convinced of the absolute importance of distributed representations until the ... 2000s or so, lol. maybe even the 2010s#2023-08-2516:48respatializedhttps://the-santiago-boys.com/
Evgeny Morozov recently did an oral history of Project Cybersyn for those interested in the history in podcast form.#2023-08-2516:54Howon Lee0% technical, i'm afraid, tho#2023-08-2609:21vemvhonest question - is this a real project, or an elaborate joke?#2023-08-2609:25Howon Leethe allocator currently works, if with a huge menagerie of known bugs and prolly a bigger one of unknown, and I spent 2 months debugging that, so not too much of a joke#2023-08-2609:25Howon Leethere's a novel nonlinearity and i relearned renormalization group again for the purpose. the way i got it to not saturate bothers me in its weirdness but its... workingness#2023-08-2609:26Howon LeeI do understand the boopfinkling and the zoopminkling does seem to be a bit much#2023-08-2514:19Dustin GetzElectric Clojure v2-alpha-428 is released, see https://github.com/hyperfiddle/electric/blob/master/CHANGELOG.md.
• Greatly improved Clojure/Script compat (varargs, apply, multi arity, #js, java & js interop forms e.g. js/alert)
• Fixed many ClojureScript compiler warnings, especially around type hints e.g. ^js
• core.match and clojure.logging now work seamlessly in Electric
• https://github.com/hyperfiddle/fulcro-electric-template and https://github.com/hyperfiddle/fulcro-electric-template/blob/master/src/main/app/server_components/http_server.clj adapter examples
• bugfixes#2023-08-2516:18pezThanks for providing! And thanks for the stellar support level you attach to it! 🙏 ❤️ ⚡#2023-08-2601:15PanelWhere is the fulcro example ?#2023-08-2613:44Dustin Getz@U01SBSXRRH6 added link to announcement, thx#2023-08-2522:54Kathleen DavisHi folks! Please consider putting your name in the hat for the upcoming board election. More information https://www.clojuriststogether.org/news/2023-board-nominations-and-our-annual-meeting/#2023-08-2717:38seancorfieldhttps://github.com/seancorfield/honeysql 2.4.1066 -- the big new feature in this release is the first cut of support for temporal queries -- follow-up in #C66EM8D5H
• Add :select with function call and alias example to README (PR https://github.com/seancorfield/honeysql/pull/502 @markbastian).
• Address https://github.com/seancorfield/honeysql/issues/501 by making INSERT INTO (and REPLACE INTO) use the :columns or :values clauses to produce column names (which are then omitted from those other clauses).
• Address https://github.com/seancorfield/honeysql/issues/497 by adding :alias special syntax.
• Address https://github.com/seancorfield/honeysql/issues/496 by adding :overriding-value option to :insert clause.
• Address https://github.com/seancorfield/honeysql/issues/407 by adding support for temporal queries (see FROM in https://cljdoc.org/d/com.github.seancorfield/honeysql/CURRENT/doc/getting-started/sql-clause-reference#from).
• Address https://github.com/seancorfield/honeysql/issues/389 by adding examples of [:only :table] producing ONLY(table).
• Add :create-or-replace-view to support PostgreSQL's lack of IF NOT EXISTS for CREATE VIEW.
• Attempt to clarify the formatting behavior of the :values clause when used to produce column names.
• Update tools.build to 0.9.5 (and remove :java-opts setting from build/run-task)
#2023-08-2814:31Roman LiutikovHappy to announce UIx Playground, a coding sandbox running on bootstrapped ClojureScript https://uix-playground.vercel.app/
• Create, share, remix and embed projects
• Start online in the playground, export as shadow-cljs project for local development
• Comes pre-bundled with React, UIx, Tailwind, react-query, react-router-dom, Three.js and React Three Fiber (more libraries will be added in future)
• Driven by Monaco editor, with basic intellisense
• Code formatting on save powered by cljfmt
• Bug reports and feature requests are welcomed https://github.com/roman01la/uix-playground#2023-08-2819:07geraldodevHi, impressive work. Are you going to release the source code ?#2023-08-2820:54Roman LiutikovThanks! No plans to open source the project in near future, but I might do it at some point.#2023-08-2821:19lilactownany ability to add additional dependencies? I'd like to use this with helix & reagent. Not sure if you're open to adding explicit support for those libraries#2023-08-2821:51Roman Liutikov@U4YGF4NGM sure! The most important part here is to make sure a library is compatible with bootstrapped cljs, so if you are up to take a look at helix and reagent I'd be happy to add them#2023-08-2822:04lilactownhelix is probably not compatible with bootstrapped cljs. I'd be surprised if reagent was not, given the number of other projects I think I've seen which implement a reagent playground#2023-08-2822:21Roman Liutikovfor UIx it was relatively easy to adapt it for bootstrapped, most of complexity is in macros namespaces, I also had to disable a couple of compile time things to make it work, but other than that 99% of the library runs perfectly fine in bootstrapped (including macros and macros-based linter)#2023-08-3011:30plexusA handful of new Lambda Island releases
• lambdaisland/fetch - cljs HTTP client {:mvn/version "1.4.80"}
Add :as flag to override response content negotiation.
• com.lambdaisland/reitit-jaatya - convert a reitit app into a static site {:mvn/version "0.1.33"}
Add :no-freeze flag to exclude specific routes from the freeze process.
• lambdaisland/kaocha - full featured test runner {:mvn/version "1.86.1355"}
Several fixes to the watch mode (thanks Simon Katz!)
• com.lambdaisland/deja-fu - time/date/date-time for cljs with great API {:mvn/version "1.5.62"}
Implement IHash for LocalTime/goog.date.Date/goog.date.DateTime
• com.lambdaisland/ornament - styled components in clj and cljs {:mvn/version "1.10.94"}
Make it possible to implement reagent form-2 components in a defstyled#2023-08-3011:33plexusFirst 1.x release for Ornament, we've been using it on almost every single project the past two years, so I think it's safe to say it's stable. Do check it out, it's one of the projects we're the most happy with and proud of.#2023-08-3017:27chromalchemyI’m loving Ornament for CSS composition! Great that it works for static sites too.#2023-09-0107:42ikitommi[metosin/malli "0.12.0"] is out. #CLDK6MFMK is a High-performance Data-Driven Data Specification Library for Clojure/Script.
• FIX: retain order with :catn unparse, fixes https://github.com/metosin/malli/issues/925
• BREAKING: Do not require timezone data directly for cljs https://github.com/metosin/malli/pull/898 with malli.experimental.time
• Remove non-root swagger definitions https://github.com/metosin/malli/pull/900
• FIX: malli.core/-comp keeps interceptor order with long chains https://github.com/metosin/malli/pull/905
• FIX: ! exception does not contain source https://github.com/metosin/malli/issues/896
• FIX: don’t add extra :schema nil to swagger :parameters https://github.com/metosin/malli/pull/939
• Add :gen/return support in malli.generator https://github.com/metosin/malli/pull/933
• Make uuid transformer to be case insensitive https://github.com/metosin/malli/pull/929
• Add :default/fn prop for default-value-transformer https://github.com/metosin/malli/pull/927
• Updated dependencies:
borkdude/edamame 1.3.20 -> 1.3.23
Big thanks to all contributors 🙇#2023-09-0114:13Jordan RobinsonAnnouncing awaitility-clj, a simple Clojure wrapper for the popular Java http://www.awaitility.org/ library that allows you to test asynchronous processes.
https://github.com/mypulse-uk/awaitility-clj
https://clojars.org/ai.mypulse/awaitility-clj
It's MIT licensed and pull requests are greatly appreciated and encouraged.#2023-10-0208:10Jordan Robinsonserves us right for using Rake to build things 😅#2023-09-0221:42adamfreyAnnouncing a deps-new-based code template: https://github.com/AdamFrey/clojure-html-server-live-reload-template
I wanted a Figwheel/Shadow-style live reload experience, but without ClojureScript, only server rendered Hiccup HTML.
I made a template to avoid the boilerplate required to set up a basic repo with this functionality. See this https://adamfrey.me/blog/post/clj-live-reload-template-release for more context.#2023-09-0223:12Jason BullersCan you comment on how this differs or improves upon https://github.com/weavejester/ring-refresh?#2023-09-0223:54seancorfieldI've added this to the deps-new README (BTW, the latest deps-new is v0.5.2).#2023-09-0300:37adamfrey@U04RG9F8UJZ I think ring-refresh was semantically connected in my mind to ring.middleware.reload , but I now see they are very different. So I didn't realize until your comment that there seems to be significant overlap between ring-refresh and what I've come up with. I'll dive in to compare the two approaches and make a note in the README. thanks.#2023-09-0301:48seancorfieldI like that you've taken the trouble to make a template for it so that other folks can easily create a new project based on your approach.#2023-09-0306:46Žygimantas MedelisBosquet - LLM Ops lib - v0.3.5 is out [io.github.zmedelis/bosquet "0.3.5"] https://github.com/zmedelis/bosquet
• Cohere LLM API support (via danielsz/cohere-clojure)
• Integrant based LLM service setup. This allows for easy extensions with any LLM service (Anyone working on Claude lib?)
• New gen tag in prompt templates. Combined with the Integrant LLM service setup, it allows to decouple model parameter definition from the concrete LLM service used#2023-09-0323:34Fabio Domingueshttps://github.com/fabiodomingues/clj-depend: A Clojure namespace dependency analyzer.
0.8.1 (2023-09-04)
• Fix snapshot file name.
• Fix documentation (cljdoc).
• https://github.com/fabiodomingues/clj-depend/issues/38: Fix execution failure when receiving arguments from Leiningen.
• https://github.com/fabiodomingues/clj-depend/issues/1: Dump the violations into a snapshot file (`.clj-depend/snapshot.edn`), and ignore any violations that are present in the snapshot file in future analysis.
• https://github.com/fabiodomingues/clj-depend/issues/33: Merge default configuration, project configuration and configurations passed as parameter.
• https://github.com/fabiodomingues/clj-depend/issues/28: Fix violation message from should not depends on to should not depend on.
• https://github.com/fabiodomingues/clj-depend/issues/26: Add the :accesses-layers option to define the dependencies of a layer in the natural order instead of :accessed-by-layers.
• https://github.com/fabiodomingues/clj-depend/issues/31: Fix regression reporting false positives for namespaces that are not covered by any other layer.
• https://github.com/fabiodomingues/clj-depend/issues/27: Print violated layers.
Any contribution is very welcome, suggestions, issues, testing, sponsorship, pull requests 🙂gratitude#2023-09-0323:42phronmophobicLooks neat! It seems like the docs had an import error? https://cljdoc.org/d/com.fabiodomingues/clj-depend/0.8.0/api/clj-depend.api#2023-09-0323:45phronmophobic> :violations a set of maps with :namespace and :violation.
What is a violation?#2023-09-0323:46Fabio Domingues> It seems like the docs had an import error? https://cljdoc.org/d/com.fabiodomingues/clj-depend/0.8.0/api/clj-depend.api
Nice catch! I'll fix it.#2023-09-0323:47Fabio Domingues> What is a violation?
Here an example:
{:result-code 1
:message "\"sample.logic.foo\" should not depend on \"sample.controller.foo\" (layer \":logic\" on \":controller\")"
:violations [{:namespace 'sample.logic.foo
:dependency-namespace 'sample.controller.foo
:layer :logic
:dependency-layer :controller
:message "\"sample.logic.foo\" should not depend on \"sample.controller.foo\" (layer \":logic\" on \":controller\")"}]}#2023-09-0323:48phronmophobicohhh. So the library analyzing your namespace requires to try to warn you if you're breaking separation of concerns?#2023-09-0323:49Fabio DominguesExactly#2023-09-0323:49phronmophobicThe sample output helps a lot to convey what the library is about#2023-09-0323:50phronmophobicThe diagram in the Readme is neat. Does it also generate diagrams or is that done separately just for the docs?#2023-09-0323:53Fabio DominguesFor now just for documentation part, but we have plans to make the tool generate the diagrams in the future.#2023-09-0412:52Fabio DominguesI just release a fix version 0.8.1 (2023-09-04):
• Fix snapshot file name.
• Fix documentation (cljdoc).#2023-09-0412:53Fabio Domingues@U7RJTCH6J now the docs are working:
https://cljdoc.org/d/com.fabiodomingues/clj-depend/0.8.1/api/clj-depend.api#2023-09-0521:13practicalli-johnPracticalli Clojure CLI Config - user aliases for community tools to extend Clojure CLI (deps.edn) projects
Monthly library version update and GitHub workflow action versions
https://github.com/practicalli/clojure-cli-config/releases/tag/2023-09-05
> Note: I'm <https://clojurians.slack.com/archives/CJTRRQ857/p1693930089727839
> |reviewing the >`:repl/`<https://clojurians.slack.com/archives/CJTRRQ857/p1693930089727839
> | collection of aliases> the Practicalli Config provides and removing those aliases that are surplus to requirements. Feedback on usage of these aliases will help decide what is removed (moved to deps-deprecated.edn file) #2023-09-0521:56Kathleen Davis#announcements https://www.clojuriststogether.org/news/august-2023-short-term-project-updates/#2023-09-0614:51athossweet-array 0.2.0 is out! https://github.com/athos/sweet-array sweet-array is an array manipulation library for Clojure with "sweet" array type notation and more safety by static types.
0.2.0 adds its own version of the def macro, which infers the static type of the init expression and automatically adds the inferred array type as the type hint. Using this macro together with other macros from the library, you rarely need to manually add type hints when defining arrays.#2023-09-0615:56Roman LiutikovAn update on UIx Playground: The sandbox is now called “ClojureScript Studio” https://clojurescript.studio
Projects can have multiple files, the editor got tabs, more libraries were added, including a new template for Reagent + re-frame projects.#2023-09-0616:03isakVery cool.
Btw, it does not load for me in Firefox on Windows (seems like an infinite loop), but it does load in Chrome.#2023-09-0616:04Roman LiutikovThanks for the report, I'll take a look 👍#2023-09-0616:15Roman Liutikov@U08JKUHA9 hmm, seem to be working well in Firefox, both on Windows and macOS. Should mention I have a bare bones FF, no extensions, maybe that makes a difference.#2023-09-0616:25isakHmm ok, I have FF developer edition, not sure if that makes a difference. I only had uBlock origin running, disabled that but it doesn't change anything.#2023-09-0616:28isak#2023-09-0708:00SergioI read that there is a great dynamic between refx and UIx, but I've not found many examples. Could it be possible to add an example or docs? A boy can only dream.#2023-09-0708:25Roman Liutikov@UQN9ESJ00 sure, it can be added. I never used refx though, so I'm not sure what exactly should go into the code, perhaps it's worth reaching out to author of the project#2023-09-0708:26Sergiosure, thanks!#2023-09-0708:28Roman Liutikov@UQN9ESJ00 feel free to submit a request in the repo https://github.com/roman01la/clojurescript-studio, include the code and a list of dependencies that should go into the example project#2023-09-0708:29Sergioblob_thumbs_up#2023-09-0709:44Benjaminwow looks super cool#2023-09-0619:11borkdudehttps://github.com/clj-kondo/clj-kondo: static analyzer and linter for Clojure code that sparks joy ✨clj-kondo gratitude
2023.09.07
• https://github.com/clj-kondo/clj-kondo/issues/1332: New linter :unused-alias. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md.
• https://github.com/clj-kondo/clj-kondo/issues/2143: false positive type warning for clojure.set/project
• https://github.com/clj-kondo/clj-kondo/issues/2145: support ignore hint on multi-arity branch of function definition
• https://github.com/clj-kondo/clj-kondo/issues/2147: use alternative solution as workaround for https://github.com/cognitect/transit-clj/issues/43
• https://github.com/clj-kondo/clj-kondo/issues/2152: Fix false positive with used-underscored-binding with core.match
• https://github.com/clj-kondo/clj-kondo/issues/2150: allow command line options = as in --fail-level=error
• https://github.com/clj-kondo/clj-kondo/issues/2149: :lint-as clojure.core/defmacro should suppress &env as unresolved symbol
• https://github.com/clj-kondo/clj-kondo/issues/2161: Fix type annotation for clojure.core/zero? to number -> boolean
• https://github.com/clj-kondo/clj-kondo/issues/2165: Fix error when serializing type data to cache
• https://github.com/clj-kondo/clj-kondo/issues/2167: Don't crash when :unresolved-symbol linter config contains unqualified symbol
• https://github.com/clj-kondo/clj-kondo/issues/2170: :keyword-binding linter should ignore auto-resolved keywords
• https://github.com/clj-kondo/clj-kondo/issues/2172: detect invalid amount of args and invalid argument type for throw
• https://github.com/clj-kondo/clj-kondo/issues/2164: deftest inside let triggers :unused-value
• https://github.com/clj-kondo/clj-kondo/issues/2154: add :exclude option to :deprecated-namespace linter
• https://github.com/clj-kondo/clj-kondo/issues/2134: don't warn on usage of private var in data_readers.clj(c)
• https://github.com/clj-kondo/clj-kondo/issues/2148: warn on configuration error in :unused-refeferred-var linter
• Expose more vars in clj-kondo.hooks-api interpreter namespace
#2023-09-0814:51practicalli-johnPracticalli Spacemacs user config - Clojure and LSP workflow
• Increased LSP idle time to improve typing responsiveness (otherwise slowed by autocompletion)
• removed syntax-checking layer as functionality seems to be covered by LSP
https://github.com/practicalli/spacemacs-config/releases/tag/2023-09-08
UPDATE 2023-09-12: added recipe to pin evil-surround to a December 2022 version, whist an issue with evil actions delete/change surrounding delimiters/paren, i.e. c s & d s investigated.
More details about the config and using Clojure in Emacs in the https://practical.li/spacemacs/ which has had many updates and improvements this year.#2023-09-0814:54ericdalloI use lsp-idle-delay of 0.05 in doom-emacs for a long time and don't face any slowness, curious about why increase to 1.5#2023-09-0815:05practicalli-johnThe slowness issue seems to happen when I moved to Emacs 29 (which didnt seem to work with Doom Emacs at at that time, towards the start of 2023).
I had lsp-idle-delay set to 0.2 and there is noticeable freeze when typing as completion tries to kick in. Disabling LSP removes this freeze. With lsp-idle-delay set to 1.5 typing is far smoother using LSP with Emacs 29 (and Emacs 30 built from source)#2023-09-0815:06ericdallothat's weird, I'm using emacs 29 with doom, would be nice to track that as I don't think that slowness is related to lsp since I can't repro using a https://github.com/ericdallo/dotfiles/blob/master/.config/doom/config.el#L140#2023-09-0815:14practicalli-johnIncreasing the lsp-idle-delay is the only approach I have found, other than removing lsp Emacs packages (lsp layer in Spacemacs) from the user config.
I can try doom again at some point, but I messed up something bad during an doom update and it wont run now, so it seems I'll have to start from scratch with Doom, it may take a while to get around to it again (maybe in the new year at I'm not actively using Doom).#2023-09-0816:30practicalli-johnYou got me curious so I installed Doom from scratch, although I still have my user config.
With Emacs 30 (compiled from source) on Linux, Doom is quite unresponsive when typing into a buffer, even opening a paren has a noticeable delay... deleting a word or line... its all very slow and simply not usable, very much not like doom on Emacs 28. Calling commands via key bindings is very snappy though. Perhaps something is not happy with my build, although its fine with Spacemacs.
Maybe a native compilation issue? Or more likely my user config (maybe an older package... something to delve into when I have more time)
Update: its still very slow to respond to any buffer actions without my config, so probably the build or native comp.#2023-09-0816:52ericdalloyeah, that's odd, never saw doom like that, maybe a specific package or config indeed, youcan check my dotfiles maybe, I have my whole OS/emacs versioned there#2023-09-0822:30ericdalloAnnouncing https://github.com/ericdallo/clj4intellij! clojure 💙 intellij
Develop Intellij plugins with Clojure!
During https://github.com/clojure-lsp/clojure-lsp-intellij development this year, I faced a lot of issues regarding develop a Intellij plugin with Clojure, so I decided to extract and document those things in a separated library and now it's ready to be used in other plugins 🎉#2023-09-0901:48pfeodrippeFoguete não tem ré #2023-09-0913:29weavejesterhttps://github.com/ring-clojure/ring-defaults 0.4.0 is out:
• Added optional map syntax for :static files and resources
• Changed default session store to cookie store
• Changed SameSite cookie default to browser default (i.e. Lax)
• Updated dependencies#2023-09-0918:16Noah BogartIntroducing https://github.com/NoahTheDuke/core_regression
I have been working on a "clojure core regression suite" which currently checks out and tests 271 popular libraries against either clojure master or a specific branch of clojure that you've made (to check some patch, for example). on my 2019 macbook pro, it runs the whole thing in about an hour. there's still some work to be done, some libraries that are failing that I haven't determined if it's broken code or incorrect set up. However, it includes nearly all of the top 100 libraries from Clojars (excluding those without test suites or public repos), all of the clojure contrib libraries, and clj-commons libraries. I built this to support the core team's efforts when verifying changes to clojure for releases, but I think it might be helpful in general as well.#2023-09-0918:17Noah BogartPRs for other libraries are welcome! This doesn't run on CI so there's no reason to hold back.#2023-09-0918:32Noah BogartIdeally, I wouldn’t have to manually define the libraries to check against, but given the multitude of ways to build and test clojure libraries and applications, it has to be manual for now#2023-09-0918:40Noah Bogart@U055XFK8V this relies on your clojure-local-dev set up, so thank you for creating that#2023-09-0922:43weavejesterWhich libraries are current broken? Are the results available?#2023-09-0923:11Noah BogartThe libraries aren’t broken per se, just that my wiring leads to tests not passing#2023-09-0923:14Noah BogartI have a comment at the bottom of the file with the list of all libraries whose tests didn’t pass in my latest run this morning. I haven’t investigated why yet, tho some are obvious like older libraries with symbol require instead of keywords in ns forms (1.9 spec inclusion broke those)#2023-09-0923:16Noah BogartIn a skipped library, i include a comment explaining why#2023-09-0923:39weavejesterAh, thanks!#2023-09-1218:45JakubIntroducing https://github.com/dundalek/parpar.nvim, a new plugin for Neovim that seamlessly integrates Parinfer and Paredit for editing Clojure code. It combines ease of use of Parinfer and extra power of advanced Paredit operations.
https://github.com/dundalek/parpar.nvim#2023-09-1218:48Samuel Ludwighypeee im gonna throw this into my config immediately#2023-09-1218:51Jakubsweet, let me know if you encounter any issues#2023-09-1220:07practicalli-johnThis sounds great. I'll give this a try with AstroNvim and if all works well I'll add it to the Clojure pack in the AstroNvim Community repo.
Thanks#2023-09-1222:53Daniel VieiraI'll give it a try, thanks for that!#2023-09-1313:09fuadI've been using a mix of vim-sexp and parinfer for a long time and it's a sweet workflow! Will look into this one#2023-09-1221:01emccueI just bumped my ring adapter for microhttp to the newest version of microhttp 0.10. There were some breaking changes in the Java api from that, so the ring adapter needed an update too.
https://github.com/bowbahdoe/microhttp-ring-adapter#2023-09-1311:50kennytiltonIt Shipped!
Congrats to @zenflowapp for the first ever app store deployment built on a new Clojure stack:
• https://github.com/kennytilton/flutter-mx#readme, the fine-grained state manager we can use across the entire app;
• https://github.com/Tensegritics/ClojureDart, a new but robust Clojure implementation for Dart; and
• https://flutter.dev/, the leading cross-platform -- Web, mobile, and desktop.
The app? Voila: https://apps.apple.com/us/app/paddle-express/id1670224875 for iOS, and https://play.google.com/store/apps/details?id=com.devcarbon.pbvm.
A tip of the hat as well to Team CLJD, @cgrand and @baptiste-from-paris. 👏#2023-09-1311:56Lidor Cohen@zenflowapp is it open source? can we learn?#2023-09-1312:03delaguardoI wonder why it is not available for Pixel 4a. Is it because of SDK incompatibility?#2023-09-1312:10ChipFun. I installed it on iOS. It tells me I’m 5 hours from the nearest rental location. I’ll use it when I get up that way and report back.
Thanks — and congratulations @zenflowapp, @U0PUGPSFR, @baptiste-from-paris, and @cgrand!! On point with https://clojurians.slack.com/archives/C03A6GE8D32!!!
edit: sorry @U02CV2P4J6S#2023-09-1312:11Benjaminclarification @zenflowapp is meant. I just happen to have the same name on slack.#2023-09-1312:27baptiste-from-pariscc @U2M723H42!
@zenflowapp can we cite your app in the showcase?#2023-09-1312:40CameronAlright!!#2023-09-1318:26Benjamin C@U8RHR1V60 It's under NDA, as it is a client's app. But if you have specific questions about developing with with CDJD and F/MX I'm happy to help where I can. 🙂
@U04V4KLKC Perhaps it's a location issue? It works on my Pixel 4a anyway.
@U05ML354JLU I hope I'm not to late to tell you, but my client has locations listed that are not actually live locations! He is still getting his business up and running, and decided he would use the app as-is to test getting it setup. To my knowledge the only actual location is the one in Minnesota.
@U02CV2P4J6S I'll add a "C" to the end of my slack user name, given how often this happens :P.
@baptiste-from-paris Sure, although let me see if I can talk my client into taking down the "demo" non-existent locations first. I hope Chip hasn't gone on a disappointing field trip already, and would prefer to keep that from happing to anyone else. I'll send you a message when I hear back. :)#2023-09-1318:30ChipI happen to be in MN. I’ll stop by if I can. Thanks.#2023-09-1714:02CameronForgot to mention backend with #C013Y4VG20J and admin management web app with #C03A6GE8D32 as well on this project 😄#2023-09-1714:20kennytiltonAnd let's not forget the custom circuit board! A true full-stack development! 🦾#2023-09-1714:20CameronTRUE#2023-09-1714:21baptiste-from-paristhat's awesome Cameron!#2023-09-1312:47borkdudehttps://github.com/squint-cljs v0.1.16 - v0.2.24, ClojureScript syntax to JS compiler
Since last announcement, added a lot of core functions, bugfixes and now also Bun compatibility.
Check here for a demo on how you can load .cljs files from .js files using a Bun loader which invokes the squint-compiler:
https://github.com/borkdude/bun-squint-loader
• Add rand-nth, aclone, add-watch, remove-watch
• Add reduce-kv
• Add max, min, every-pred
• Add into-array, some-fn, keep-indexed
• Fix for lazy-seq when body returns nil
• Fix https://github.com/squint-cljs/squint/issues/325: fix varargs destructuring
• Fix https://github.com/squint-cljs/squint/issues/326: bun compatibility
• Support next on non-arrays
• Add compare
• Fix instance? in return position
• to-array, str/starts-with?
Channel: #squint#2023-09-1318:46phronmophobichttps://github.com/phronmophobic/clj-media v2.0: Read, write, and transform audio and video with Clojure.
Clj-media aims to provide a clojure friendly, high level API for FFmpeg. FFmpeg has a huge surface area and this release covers many common tasks, but there is a still a lot of low hanging fruit for future work!#2023-09-1408:43Wout NeirynckPresenting https://github.com/monkey-projects/oci-sign, a library that you can use to generate signature headers when invoking https://cloud.oracle.com/ endpoints. It's meant as a minimal-dependency pure-Clojure alternative to their Java implementations. I'm using it for my own (more efficient) Clojure api libs.#2023-09-1414:15Ertugrul Cetinbabylon-cljs is a 3D character controller prototype project. It showcases how to integrate BabylonJS with ClojureScript. The project also utilizes a rule engine, with a custom wrapper around O'Doyle Rules.
Live Demo: https://ertugrulcetin.github.io/babylon-cljs-demo
GitHub: https://github.com/ertugrulcetin/babylon-cljs#2023-09-1509:19mpenetNew spandex release is out, supporting elasticsearch 8.x - https://github.com/mpenet/spandex#2023-09-1804:34namenuthanks for this.
I found .pom file contains your local path in absolute
<sourceDirectory>/Users/mpenet/code/spandex/src</sourceDirectory>
This cause error while loading and compilng, so I workarounded via git deps instead of mvn.#2023-09-1805:11mpenetah good catch, I ll remove it#2023-09-1805:28mpenet0.8.1 should fix it#2023-09-1805:34namenuohh thanks!#2023-09-1805:34namenugreat move to deps by the way 🙂#2023-09-1805:41mpenetit was long overdue#2023-09-2911:47Teemu Kaukorantajava.io.FileNotFoundException: Could not locate qbits/spandex__init.class, qbits/spandex.clj or qbits/spandex.cljc on classpath.
This is what I get when trying to compile after updating#2023-09-1510:54ilmoAnnouncing oksa, a new library for generating GraphQL queries using Clojure data structures.
https://github.com/metosin/oksa#2023-09-1517:27mpenetNew mina release, following helidon/nima M2 release - https://github.com/mpenet/mina (ring adapter for helidon/nima)#2023-09-1519:02henrikDoes it handle websockets?#2023-09-1519:09mpenetHelidon can. I have not worked on that tho. I am not sure how well supported it is yet in helidon#2023-09-1519:09mpenetMy next target is the grpc server#2023-09-1519:10mpenetThen i suppose i could look into ws#2023-09-1519:43henrikThere are traces suggesting that there should be support, but I’m not finding any documentation.
https://github.com/helidon-io/helidon/issues/5421#2023-09-1704:32tengstrandIf you have failed to understand what problem Polylith solves, take two minutes and read https://polylith.gitbook.io/polylith/introduction/sharing-code newly written page!#2023-09-1706:30Christian Johansen> we have three alternatives:
>
>
> • Duplicate the code
> • Create a library
> • Use Polylith
These are not the only options. I have solved this problem by using multiple source directories in the same repo. That sounds a lot like what you explain further down that polylith does. It's not clear to me exactly what polylith is though - is it just a name for this practice, or some tooling?#2023-09-1706:47tengstrandDo you store a deps.edn file in each of these src directories? And if so, do you depend on other src directories? Just curious how you have solved it.#2023-09-1707:03Stef Coetzee> It's not clear to me exactly what polylith is though - is it just a name for this practice, or some tooling?
@U1G0HH87L please correct if wrong, but I understand it to be both. There's the Polylith architecture and then there's the https://polylith.gitbook.io/poly.
From https://polylith.gitbook.io/polylith/tool/the-polylith-plugin:
> We didn't have the Polylith Tool when we started building our first Polylith workspace. We manually created the directory structure and built the projects every time we made a change. Polylith's other advantages still made it a delight to work with, compared to our previous situation (Microservices).#2023-09-1707:04delaguardo> If you answered yes to these questions, we are curious about what architecture you are using, as we haven't found any other architecture that solves these problems!
>
I use a flexible entry point, that is capable of starting a subset of "services". no extra tooling, no weirdly named stuff - just thoughtfully separated namespaces#2023-09-1707:05Christian JohansenSame, @U04V4KLKC #2023-09-1707:07Christian Johansen@U1G0HH87L no, typically not. I just separate the code at the top level. Pretty much the same effect as a library, but with the code in the same repo. When necessary I have had different build targets to deploy different services from the same code base.#2023-09-1707:54tengstrandThanks for your feedback! You are right that the main solution to code sharing is to let the codebase live in a monorepo and split the code in many src directories. I will add that as option 3, and the Polylith alternative as option 4, where I explain how Polylith decouples the building blocks even more, to support swappable components.
Polylith also gives you support for incremental testing where only the affected code is tested. It has a standarized directory structure that allows us to get an overview of the codebase, like https://github.com/polyfy/polylith/blob/issue-318/doc/production-systems.adoc production systems that shows an overview of the building blocks (called bricks) and the artifacts that are stored in projects + their dependencies and library usage.#2023-09-1708:03tengstrandIt would be interesting to see an example of how you structure your monorepo @U9MKYDN4Q and how your artifacts are defined, e.g. by listing all the src directories in deps.edn files, or something else. And also where you specify your libraries.#2023-09-1708:26p-himik> Do you store a deps.edn file in each of these src directories? And if so, do you depend on other src directories?
FWIW, that's what I do. Started doing that with juxt/edge quite some time ago.#2023-09-1708:29tengstrandSo each "component" doesn't have their own deps.edn file @U2FRKM4TW? If not, do you need to specify all the libraries in the "artifact" deps.edn ? (this was how the first deps.edn based polylith tool worked)#2023-09-1708:33p-himikThey do have their own deps.edn file, so the structure looks somewhat like this:
lib
- logging
- deps.edn
- src
- app.prod
- deps.edn
- src
- app.dev
- deps.edn
- src
src
deps.edn
With top-level deps.edn referring to the ones in lib via :local/root. Different libs are used by different aliases and have different dependencies themselves. Some of the libs don't have sources at all - they're just there to collect some specific dependencies.#2023-09-1708:44pezI also sometimes do what @U2FRKM4TW does there. Inspired by Polylith. 😀 #2023-09-1708:49tengstrandOkay, cool @U2FRKM4TW. Now some more questions:
1. Is the top-level deps.edn mainly used for development, or is it that is used, or some combination?
2. Which deps.edn files depend on logging using :local/root ?
3. Are you only creating a "lib" when you need to share code, or do you use it to more easily reason about the code?
4. Is the purpose of app.prod/deps.edn to specify an artifact (e.g. a service)?
5. How many sharable "libs"/components do you have in the codebase?#2023-09-1708:56p-himik1. It's the entry point, it's used for everything so I can do anything from the root of the project without specifying anything extra. There's a :dev alias that adds to dependencies
2. The structure above is only approximate. In actual projects, there are and logging.prod that both depend on logging. The latter just has all of the dependencies and some common logging code that I use in the apps. The former two specify logging configurations and are used by and app.prod
3. Both. The main src is the app. Anything else, like e.g. custom CLI scripts or some meta stuff like logging specifics or instrumentation go into lib
4. Yes, and maybe some dependencies that are used only in production
5. Depends on the project. The one that I have open right now has 11
As I mentioned, it's all form juxt/edge, I haven't invented anything new here.#2023-09-1709:09tengstrandInteresting @U2FRKM4TW. More questions:
1. Is everything clj/cljc code?
2. Is the src also something that is deployed or is it only used for development?
3. Do you have more than one service?
4. Can you access all your code in all your services from the app e.g. working from a single REPL?#2023-09-1709:13p-himik1. No, only what needs to be
2. I deploy via sources inside Docker images so I deploy everything. I use specific aliases with clj -P to populate the Maven cache during image building. In the end, a few source files that I don't use that don't affect the classpath don't matter at all so there's no reason to pluck them out
3. Yes
4. Unclear what you mean. The code is in a single project so I can easily access it by itself. Some src directories within lib might not be added to the classpath when launching the REPL so those won't be available via require but I guess one could use add-lib here. Runtimes of the services are separated so a single REPL won't help here#2023-09-1710:07danieroux@U1G0HH87L I am in the target audience for this, and I thank you gratitude#2023-09-1714:42tengstrandThanks @U9E8C7QRJ! ☀️ #2023-09-1715:21tengstrandYes @U03CPPKDXBL, it's an architecture with tooling support for Clojure and Python at the moment.#2023-09-1715:34lreadAs a curious fellow, I'm learning about Polylith and its ideas. So far, I've got no issue with its terminology and see it as a vocabulary for the strategy it describes.
I'm sure some folks have already figured out an architecture that they are perfectly happy with.
For those who have not, I think that Polylith is worth exploring.#2023-09-1715:51pezI’ve seen people who are happy with their current architecture be very happy with having checked out Polylith and change in that direction, either fully or with inspiration from it. Not saying that is all projects, just that I’ve seen this happen for some.#2023-09-1716:12bherrmann@U1G0HH87L is it true that for Polylith to shine, you really need to be implementing multiple systems that require some amount of sharing. So if you have a single system that does not share code with any other system - then polylith is less applicable. In particular, enterprises with multiple teams where code is in the middle of these teams - polylith is especially applicable - as the code used by both teams sometimes gets murky about ownership and change management. Polylith helps keep everyone on the same page in this common enterprise-ish situation.#2023-09-1716:48tengstrandI have had this discussion with @U2BDZ9JG3 before, and we agreed on that we prefer Polylith even when you run your whole system in a single service. You get so many other benefits, and that it's not only about sharing across services, and It's pretty nice to divide your system into smaller decoupled pieces, and you also get the different views that the poly tool offers via the info/deps/libs commands.#2023-09-1718:06ikitommiI like what you have done with Polylith - great tools, docs and support - using it in one of the projects, thanks! That said, I wish there was an unopinionated layer under the “bricks” architecture - same tooling (dependency resolution, running just tests for changed parts + optionally their dependencies etc) but would work with “normal” monorepo like @U2FRKM4TW described - just libs and apps as sources. Polylith-lite? 😉#2023-09-1718:29tengstrandI'm glad you like it @U055NJ5CC! Making a less opinionated version would require even more configuration I think, because of the extra flexibility, and it would be harder to implement the tooling around it without the standardised directory structure. The checks that are executed by the poly tool, are there to make sure that everything is composable and that we can run tests incrementally. So it needs to be opinionated to some extent.#2023-09-1723:19seancorfieldFor the curious, my long-running "`deps.edn` and monorepos" series starts before we adopted Polylith and talks about the challenges we had and how we addressed them in the first two posts and then about how we started to move to Polylith in the third and subsequent posts: https://corfield.org/blog/2021/02/23/deps-edn-monorepo/#2023-09-1806:23slipsetStarting a read and getting to :
>> ...we have three alternatives:
> • Duplicate the code
> • Create a library
> • Use Polylith
There is a fourth alternative here (might already have been mentioned in the thread) : Just deploy the same code but with two entry points. No extra tooling required. Downside would be that the deployed artifacts would be somewhat larger than what they needed be, but for us, that has not been a problem.#2023-09-1806:44Christian Johansen@U04V5VAUN that's exactly what we did on my last project 😊 #2023-09-1806:48tengstrand@U04V5VAUN Does it solve the reuse of ”code in the middle” like the red box in the example, or is it only the entry point that can be replaced?#2023-09-1806:53slipsetNot sure I understand your question. From our sources we produce an uberjar. Depending on env params passed on startup, we either start service a or service b.#2023-09-1806:54slipsetjava -jar foober.jar -DSERVICE_TO_START=A or some such.#2023-09-1807:42seancorfieldBasically you're ignoring reuse across artifacts and just sticking all the code into one artifact. So, no, the red box isn't reused per se.😁#2023-09-1807:46slipsetTrue, I guess it’s just being … used.#2023-09-1809:22p-himikI really can't see a problem here. With appropriate tools (that we have with clj) code is code - whether it's within a library or within a directory.
If you have the same sources in two different services running in different places and call that "duplication", then it's just as much of duplication if you copy a JAR representing that piece of code across all the places. Unless, I suppose, you have a NAS with your ~/.m2 that's shared by all the services, but I hope everyone sees this sentence as a joke.
The link in the article mentioned in the OP that's supposed to elucidate what it means that duplicate code is undesirable just goes to a Wikipedia article that explains exactly nothing and only repeats "is generally considered undesirable for a number of reasons". But it has a source link, so if we follow that and also read the rest of the Wiki article, all I see is people talking about manually copying specific chunks of code into different places.
Whereas "copying" via deployment of the same artifact is not "copying the same specific chunk of code within a project". It doesn't violate any commonly praised principles, it doesn't create any issues since it's not a manual process of deliberately calling cp -r on every dir that you need. It's just a deployment stage that grabs the whole monorepo - either via COPY in some Containerfile or via an uberjar, or maybe some other way. The fact that someone can label it "copying" and "not reusing" doesn't mean that something undesirable is going on.
So if there is something wrong with that approach from the perspective of copying, IMO neither the OP's article nor Sean's article series explain it well enough, seeing that there are more than one person here that don't really see an issue with "copying".
And I understand that explicit separation into dedicated components can improve some particular aspects, but AFAICT we aren't talking about that, so I'm focusing on the "copying" part.#2023-09-1811:16tengstrandIf you deploy the exact same code to two different places, then it's not considered code duplication, because you use the same source. Is that what you mean @U2FRKM4TW?#2023-09-1811:40Daniel JompheNice job on the new intro.
I wanted to mention that the new text seems to address mostly the three middle bullets, and you might want to write a few sentences about the other two bullets.#2023-09-1811:41p-himik> it's not considered code duplication
Yes.
> because you use the same source
More than that, as cp -r src src2 would also be using the same source initially, but it by itself creates a duplication.
The act of distribution is completely separate from source code organization. Some comments in this thread seem to mix the two.#2023-09-1812:08tengstrandGood point @U0514DPR7. I can try to explain the first point more (it's solved by LEGO idea). I have already decided to leave out the last point.#2023-09-1919:59Paavo Pokkinen@U1G0HH87L Thank you for this, the material is spot on.
Curious about workspaces and their relation to Git repo. Would you imagine scenario where company might have multiple workspaces within a single repo, or multiple repos with one workspaces each?
How would you set this up in an agency setting, where similar (but still quite different) projects are being delivered to a number of customers? Maybe each customer should have their own workpace, but in that case, can there be re-use across workspaces (like workspace named “common”)?
Or maybe use one workspace, but prefix all really client specific stuff.
I’ve also seen some setups that use Git submodules for pulling in components and shared code (not in Polylith architecture though), thoughts on that, and how that might fit here?#2023-09-1920:24tengstrandOne alternative is to let the git repo and the workspace have a 1:1 relationship so that you store the workspace directories and files at the repository root. The other alternative is to let one or several workspaces live in the repo in separate directories. This is described in the poly tool documentation https://polylith.gitbook.io/poly/architecture/workspace#existing-git-repository.
Right now we don't support sharing components between workspaces, but that is on the list to be implemented.
Yes, prefixing customer unique components could be a solution, as well as having a separate "common" workspace for shared components (when we have support for sharing between workspaces).
I know about git submodules, but haven't tried it out myself. But yes, that could be an option. If you search for submodules in this channel, you will find some discussions.#2023-09-2005:26Paavo PokkinenPerhaps shared components can be pulled in as Git submodules. Although, then each one of them requires a repository. Maybe top-level “components-shared” folder could be also an option? Or symlinking components from that, transparently to the tooling?#2023-09-2005:29Paavo PokkinenAlso trying to understand what do you do with 3rd party libraries? In some monorepo designs they are vendored in to monorepo, so that only specific version of a library is ever used across all applications/company. And then that piece is updated in one go. If I want to do that, do I try to make the lib a “component”, or something else?
Seems you have components depending on libraries, that can lead to dependency conflicts? eg. component A wants version X of specific lib, component B wants Z.#2023-09-2021:05tengstrandIn Polylith you typically want to use the same version of a library in all your components (and bases). If you don't and include two components that has different versions in a project, then it will pick the latest version of the two. You can also let the project override the library version and set it to an older or newer version.#2023-09-2021:09tengstrandThe https://polylith.gitbook.io/polylith/introduction/polylith-in-a-nutshell has been updated quite a lot. Please have a look and see what you think.#2023-10-3006:39tengstrandThe original page is now split up into three pages:
• https://polylith.gitbook.io/polylith/introduction/sharing-code
• https://polylith.gitbook.io/polylith/introduction/testing-incrementally
• https://polylith.gitbook.io/polylith/introduction/polylith-in-a-nutshell#2023-10-3011:58Daniel JompheDefinitely seems better, and it hints even more at the possibility to pitch some more the incremental testing benefits. In that page, maybe e.g. provide an example from one of the production systems in use (running its entire test suite takes 14 mins, but with this, it’s often 30 secs instead).#2023-09-1820:02ritchieOk, it still has rough edges, but I'm putting it out - Concierto a simple Babashka driven orchestration tool. Github here https://github.com/conciertio/concierto, and docs here https://www.conciert.io/#2023-09-1910:51djanusis it concierto or conciertio? 🙂#2023-09-1911:32ritchieconcierto is name of the project but it's a popular name so went for http://conciert.io domain and hence conciertio for uniqueness on github - maybe i should just switch it all to conciertio to avoid confusion and be done with it.#2023-09-1917:55martinklepschInteresting. I just looked at https://kamal-deploy.org/ while riding the train earlier today. Seems to be vaguely similar in it's intention?#2023-09-2011:36ritchieon quick reading - i think we have the same intention, however kamal maybe higher level in the sense there's more built in from start - but I'm hoping that Concierto's extension mechansim will enable 3rd parties, for example, provision a DigitalOcean server. So, generally i tend to view concierto as plumbing to be extended by higher level scripts of the installation#2023-09-2011:41ritchieif you have a look at my "demo lxd" extension, i think that gives an idea of just how useful the extensions could be - a formalised version of that extension where multi tier app can be fully simulated locally by specifying the cloud-init file and OS to use.#2023-09-2011:46ritchieanother extension area is doing more statically than you may do otherwise - due to the fact services are sub-repos. For example, http://e.gi have an extension I'm playing with that creates a an api router (nginx proxy) container over multiple services, by simply having a "router_locations" file in each service directory which wants to participate in the api - that removes dynamic tools like traefik - that is, an nginx proxy container is deployed with static paths to all participating containers#2023-09-2214:32jamesLots of interesting work to unpack in concierto. Is there somewhere for a follow-up discussions?#2023-09-2220:42ritchieI added discussions on github, https://github.com/conciertio/concierto/discussions. Also, there are some videos here https://www.conciert.io/starter.html which I hope shed light. If there is a specific area i can address via a video let me know.#2023-10-0104:12Coby TamayoThis looks really cool! I have been idly dreaming about a Babashka-driven infra manager for some time 😁#2023-09-2011:36ritchieon quick reading - i think we have the same intention, however kamal maybe higher level in the sense there's more built in from start - but I'm hoping that Concierto's extension mechansim will enable 3rd parties, for example, provision a DigitalOcean server. So, generally i tend to view concierto as plumbing to be extended by higher level scripts of the installation#2023-09-1913:34Sam RitchieAnnouncing v0.3.0 of Emmy-Viewers! This library adds powerful, interactive 2D and 3D plotting to the #emmy computer algebra system via #clerk or #portal, all from Clojure, no ClojureScript build required.
v0.3.0 add lots of physics helpers that make it easier to write physics animations than cobbling something together at the bottom of the stack. (https://github.com/mentat-collective/emmy-viewers/releases).
The easiest way to play around with #emmy and Emmy-Viewers is via Maria.cloud, thanks to @mhuebert’s amazing work.
• live, 3D plotting in Maria: https://2.maria.cloud/gist/b94f923167a574acce2b534aa9f38bc9
• interactive 2D plotting: https://2.maria.cloud/gist/d3c76ee5e9eaf6b3367949f43873e8b2
• interactive Clerk physics simulation: https://emmy-viewers.mentat.org/dev/examples/simulation/ellipsoid/edit
The https://emmy-viewers.mentat.org/ has Getting Started instructions — the easiest way to start is with the emmy-viewers/clerk template https://emmy-viewers.mentat.org/#clerk-project-template.
• Interactive docs: https://emmy-viewers.mentat.org/
• GitHub: https://github.com/mentat-collective/emmy-viewers
• Clojars: https://clojars.org/org.mentat/emmy-viewers
See you at Strange Loop in a few days!#2023-09-2009:33eval2020v0.9.0 of https://github.com/eval/deps-try#installation, a tool to quickly try Clojure (libraries) on rebel-readline.
Additions:
- Add keybinding ^X^T to ‘eval&tap at point’.
Invoked with empty prompt it taps the result of the last evaluation (exception or *1).
Ideal if the last output turned out to be terminal-filling.
- Upgrade https://github.com/alexander-yakushev/compliment, and unlocking:
- private vars are now suggested when using var-quote notation, i.e. #'some-ns/|TAB.
- private and deprecated suggested vars are shown in red.#2023-09-2010:38Ivanabb-clj (VSCode plugin for Clojure) updated: goto definition feature added. VSIX is available at releases
https://github.com/Ivana-/bb-clj#2023-09-2015:24Kathleen DavisOur developers have been incredibly busy - check out their https://www.clojuriststogether.org/news/july-and-august-2023-long-term-project-updates/ on the long-term projects Clojurists Together is funding in 2023.#2023-09-2115:07cheewahintroducing the following libs for protobuf
• https://github.com/s-expresso/clojobuf-codec serialize/deserialize protobuf binary format
• https://github.com/s-expresso/rubberbuf transpile protobuf definitions into ast for easy manipulation/interpretation
• https://github.com/s-expresso/clojobuf encode/decode plain map to/from protobuf binary (uses above 2 libs)
and of course these 3 started off as 1 single project. at some point i decided to split them up, as the first 2 might be useful to others as standalone lib, so here we go 🙂#2023-09-2115:14mpenet3rd link is a 404#2023-09-2115:17cheewahthanks for informing. i forgot to change the repo visibility to public. it is fixed now#2023-09-2115:29isak@U02SMNATXCY have you looked at https://github.com/appsFlyer/pronto? How does it compare?#2023-09-2115:33cheewahIt is a good library. Unfortunately lack of proto2 and cljs support makes it not ideal for my use case#2023-09-2115:34isakAh I see, makes sense#2023-09-2309:43Eugen@U02SMNATXCY: have you looked at polylith to keep all in the same repo https://polylith.gitbook.io/polylith/ ?#2023-09-2310:03cheewahi looked at polylith out of curiosity... just briefly, so my understanding on it is extremely limited. at the end i think these 3 libraries dependencies are simple enough (i.e. only lib3 depends on lib1 and lib2), and keeping them as separate project is also beneficial for end user who is only interested in say only lib1 or lib2 since the codebase is smaller. in local development, i simply make lib3 use :local/root for lib1/2. i am 96.27% sure i will start using polylith when i start building sufficiently complex application, but now seems like not the time yet ;)#2023-09-2414:28jjttjjWoah this is exactly what i wanted to exist like a month ago when I was integrating a grpc thing for the first time.
On windows, when I add the clojobuf git dep with the latest sha and start a clj repl I get
...
Checking out: at 1f8689507eb5ac1e99aef2bb36eab89804811b5b
git --git-dir C:\Users\me\.gitlibs\_repos\https\\s-expresso\clojobuf-codec worktree add --force --detach C:\Users\me\.gitlibs\libs\s-expresso\clojobuf-codec\1f8689507eb5ac1e99aef2bb36eab89804811b5b 1f8689507eb5ac1e99aef2bb36eab89804811b5b
Preparing worktree (detached HEAD 1f86895)
error: invalid path 'resources/protobuf/generated-bin/singular/string_"the quick brown fox".protobin'
fatal: Could not reset index file to revision 'HEAD'.
Error building classpath. Unable to checkout 1f8689507eb5ac1e99aef2bb36eab89804811b5b
null
#2023-09-2414:34jjttjjI see there are the file paths here: https://github.com/s-expresso/clojobuf-codec/tree/main/resources/protobuf/generated-bin/singular
I guess on windows there can't be a " in a file path. I can't even clone the clojubuf repo to try to change it 😅#2023-09-2500:04cheewahhi thanks for reporting this. it should be fixed now with v.0.1.2
{:deps
s-expresso/clojobuf {:git/url ""
:git/sha "3156e4b284b8c9f9ccbef376f0698490ca06842d"
:git/tag "v0.1.2"}}
will appreciate if you can take it for a spin and let me know if it works on windows now 🙂#2023-09-2514:51jjttjjSeems to be working, thanks for the fix!#2023-09-2411:07Wernerhttps://github.com/wkok/openai-clojure v0.11.0 released
• Added support for new https://openai.com/blog/gpt-3-5-turbo-fine-tuning-and-api-updates
#2023-09-2504:32Kent BullWill be using this! Thanks.#2023-09-2415:53ikitommi[metosin/malli "0.13.0"] is out. #CLDK6MFMK is a high-performance data-driven data specification library for Clojure/Script. New stuff:
• Officially drop Clojure 1.10 support. Tests haven’t passed for some time with Clojure 1.10, but this was not noticed due to a faulty CI setup.
• BREAKING: Fallback to use result of first branch when decoding :or and :orn, https://github.com/metosin/malli/pull/946
• BREAKING: decode for :double and double? in cljs doesn’t allow trailing garbage any more https://github.com/metosin/malli/pull/942
• Use type inferrer when encoding enums https://github.com/metosin/malli/pull/951
• Faster generators for :map, https://github.com/metosin/malli/pull/948 & https://github.com/metosin/malli/pull/949
• Use bound-fn in ! to preserve out https://github.com/metosin/malli/pull/954
• FIX: :altn can’t handle just one child entry when nested in sequence schema https://github.com/metosin/malli/pull/945
• FIX: Malli generates invalid clj-kondo type specs for non-vararg sequence schemas https://github.com/metosin/malli/pull/952
• FIX: :tuple should generate clj-kondo seqable https://github.com/metosin/malli/pull/962
• FIX: malli.experimental.describe descriptions of :min and :max are backwards https://github.com/metosin/malli/pull/959
• FIX: retain order with :catn unparse, fixes https://github.com/metosin/malli/issues/925
Changelog: https://github.com/metosin/malli/blob/master/CHANGELOG.md#0130-2023-09-24
Code: https://github.com/metosin/malli
See also: https://github.com/eval/malli-select - spec2 selection for Malli (for when you only need part of the herd 🐑)
Big thanks to all contributors and clojurists-together for support!#2023-09-2416:25eval2020Thanks for the malli-select shoutout! 🙏:skin-tone-2: #2023-09-2418:04tbrookeWhat about support for inheritance?#2023-09-2513:07ikitommirelease of inheritance requires the effective types, which is not ready for release. kinda work, but wip.#2023-09-2421:03Fabio Domingueshttps://github.com/fabiodomingues/clj-depend: A Clojure namespace dependency analyzer.
0.9.0 (2023-09-24)
• https://github.com/fabiodomingues/clj-depend/issues/41: API to check if clj-depend is configured.
• https://github.com/fabiodomingues/clj-depend/issues/39: Fix circular dependency not being treated as a violation.#2023-09-2515:56nonrecursivehttps://github.com/donut-party/service
this experimental lib lets you define a “virtual service” in a library that a client can provide a handler for. immediate use case is to make it possible to have a library interact with a data store when you don’t know what data store the client is using. sharing even though it’s still a baby bc I’d love thoughts/feedback 🙂#2023-09-2518:27vemv> Why not use protocols?
> TODO
That's the first thing I wondered... :)#2023-09-2518:31Thomas Moermanwhat a cliffhanger 😉#2023-09-2613:44borkdudeA new version of #C03KCV7TM6F, the last release was in March.
https://github.com/babashka/neil: a CLI to add common aliases and features to deps.edn-based projects
See the https://blog.michielborkent.nl/new-clojure-project-quickstart.html blog post for a gentle introduction into neil.
https://github.com/babashka/neil/blob/main/CHANGELOG.md#0261
• https://github.com/babashka/neil/issues/181: fix neil --version
• fix tests by referring to latest hiccup (https://github.com/teodorlu)
• https://github.com/babashka/neil/issues/180: neil dep upgrade: allow upgrading from an unstable version to the latest unstable version (https://github.com/teodorlu)
• https://github.com/babashka/neil/issues/180: neil dep upgrade: with --unstable, opt-into unstable library updates (https://github.com/teodorlu)
• https://github.com/babashka/neil/issues/183: Don't drop :exclusions when running neil dep add or neil dep upgrade (https://github.com/borkdude and https://github.com/teodorlu)
Most of the work on this release was done by @teodorlu, thank you!#2023-09-2614:31ChipThanks for this project. Fun name choice.#2023-09-2619:47greglookAfter two years of on-again-off-again development, I'm really happy to announce that the vault-clj 2.x rewrite is finally live! toot This is a Clojure client for Hashicorp's Vault secret management system, built on http-kit and designed to fit into your application's chosen execution and tracing ecosystem. Thanks to the various Clojurians who provided feedback, PRs, or even the occasional ping to ask when it would finally be released. ❤️ 😅
Check out 2.1.583 for the latest release!
https://cljdoc.org/d/com.amperity/vault-clj/2.1.583/doc/readme#2023-09-2620:09borkdudealso babashka compatible ™️#2023-09-2708:52Matthew Davidson (kingmob)Aleph 0.7.0-alpha2 is now available. The only change is a security fix to validate that server certificates' hostnames match the hostname you're connecting to. See https://cwe.mitre.org/data/definitions/297.html for more.
If you only use Aleph as a server, and never as a client, this will not affect you.
This is a minor update, but I'm putting it in #announcements instead of #releases because this is a potentially breaking change if there are misconfigured server certificates that Aleph talks to. If you don't control the endpoint you talk to, and need to disable this behavior, set the new option :ssl-endpoint-id-alg nil.
https://clojars.org/aleph/versions/0.7.0-alpha2#2023-09-2801:09Kathleen DavisCalling all Clojurist Together members. THE POLLS ARE OPEN. https://www.clojuriststogether.org/news/announcing-2023-board-nominations/#2023-09-2911:39tcrawleyClojars now requires a license in the POM for new projects or projects that already specify a license
Hi all!
Clojars (https://clojars.org - the community repository for open source Clojure
libraries) will now require a license to be specified in the POM file for:
- newly uploaded versions for new projects
- newly uploaded versions for existing projects where the prior version had a license
We will then start requiring a license for all newly uploaded versions on or
after 2024-01-01. Note that this will not impact any existing versions;
existing versions that don't have a license in the POM file will remain
unchanged.
For more details, see https://github.com/clojars/clojars-web/issues/873 for discussion of the change, and the
https://github.com/clojars/clojars-web/wiki/Pushing#licenses for how to add a license to your POM.
Why is Clojars making this change?
We are making this change:
- to better support auditing from java ecosystem tools that use the POM as the
source of truth for the license
- enforce better hygiene; all open source projects should have a license
How does this change impact me?
If you only consume projects from Clojars and do not release libraries, you
don't need to do anything.
If you publish projects to Clojars, you will need to:
- include a license with any new projects
- continue to include a license with new versions of projects where you already
provide a license
- update any projects that don't provide a license to provide one before the end
of the year if you plan to release a new version
If Clojars rejects your deploy, you will see a message like:
Could not transfer metadata org.clojars.tcrawley:deploytest/maven-metadata.xml from/to clojars (): authorization failed for , status: 403 Forbidden - the POM file does not include a license. See
Most versions already have licenses in their POM files since https://leiningen.org/
includes one by default, and prints a warning when you try to deploy without
one. But newer tooling built on the https://clojure.org/guides/deps_and_cli doesn't have this
warning (however, https://github.com/seancorfield/clj-new will generate a pom.xml that does include a license
if you use it to template your project).
Thank you
Thanks to Peter Monks for suggesting this change, and Daniel Compton for
discussing a solution.
Supporting this work
This work was done as part of an ongoing maintenance contract from https://www.clojuriststogether.org/
https://www.clojuriststogether.org/. You can also sponsor me directly on https://github.com/sponsors/tobias if you would
like to directly fund my maintenance of Clojars.
Please reply here or on the issue if you have any concerns or questions.
- Toby#2023-09-2916:07seancorfieldNote: lib projects created via deps-new have a license in the generated pom.xml files, just like lib projects created via clj-new -- but this may not be true of third-party templates you use with either tool so you'll still need to check, if you're using a third-party template.#2023-09-2917:10tcrawleyThanks @U04V70XH6! I forgot about deps-new. I change the Clojars wiki to point to it instead of clj-new.#2023-09-2917:11tcrawleyhttps://github.com/clojars/clojars-web/wiki/Pushing#licenses has been updated.#2023-09-3005:29seancorfieldhttps://github.com/clojure-expectations/clojure-test of the clojure.test-compatible kind: com.github.seancorfield/expectations {:mvn/version "2.1.182"}
• Improved failure reporting: most failures now provide an additional message describing the failure as well as improving how the expected and actual values are displayed (primarily hiding =? and showing a more accurate/intuitive test form).
• Update deps.edn to use :main-args (instead of :main-opts) for parameterized tasks in build.clj -- see https://clojure-doc.org/articles/cookbooks/cli_build_projects/
• Drop support for Java 8 (it may continue to work but it is no longer tested).
• Update dependencies to latest stable versions.
Follow-up in #expectations (or #testing)#2023-10-0108:31mkvlr👁️ https://clerk.vision io.github.nextjournal/clerk {:mvn/version "0.15.957"} has been released . ✨
Notable improvements in this release:
• ✈️ Offline support: enable working fully offline caching assets on use. Also works for dynamically loaded libraries.
• 🧩 Make overriding of :page-size easy using viewer-opts: (clerk/table {::clerk/page-size 7})
• 🪅 Simplify overriding of default viewers by changing semantics of clerk/add-viewers! to perform in-place positional replacement of named added viewers
• 🌱 Support :add-viewers attribute on viewers to ease customization of child viewers
• 🌈 Unify the link handling between build! and serve!
And more, get all details in the:wood: https://github.com/nextjournal/clerk/blob/9c38ff3ef240c9bd21e596792adb2ebdbb5a738d/CHANGELOG.md#015957-2023-09-28, find the release on 📦 https://clojars.org/io.github.nextjournal/clerk, read the 📖 https://book.clerk.vision, follow-up in #clerk.#2023-10-0108:36Daniel GersonI think your Changelog is a joy to read with the icons 🌸#2023-10-0108:38mkvlr@U03B2SRNYTY great to hear! I’m not always sure it’s worth it / not too distracting#2023-10-0108:42Daniel GersonI get the concern. Most changelogs are just very dry. 1️⃣ You've indexed your icons so they aren't just fluff. This does require familiarisation which can initially be distracting. 2️⃣ I think the net result is something pleasurable beyond the usefulness of visually filtering issue types.#2023-10-0208:17namenuI've released an GitHub Action that allows you to check changing dependencies upon your PR. It's only been tested on a few projects, but I hope it helps.
https://github.com/namenu/deps-diff#2023-10-0210:09simongrayLooks useful for all of us with deps.edn projects. Thank you!#2023-10-0210:10simongrayAnd what a great, illustrative, problem statement BTW!#2023-10-0215:46namenuAdded deps cli example. Just make some changes in your deps.edn then run:
clj -Sdeps '{:deps {io.github.namenu/deps-diff {:git/tag "v1.1" :git/sha "c1e0a84"}}}' \
-X namenu.deps-diff/diff \
:base '"HEAD"' \
:target '"deps.edn"' \
:format :cli#2023-10-3000:57namenuThanks for the advice. My initial thought was generating deps.lock. However, if the alias is n, the calculation grows to 2^n, which is a disadvantage. I have no idea how to workaround this#2023-10-3008:44onetomwell... u should be using some off the shelf diffing solution, instead of trying to roll your own.
there are a few to choose from:
1. https://clojuredocs.org/clojure.data/diff
2. https://github.com/lambdaisland/deep-diff2
3. https://github.com/juji-io/editscript
also, i would just look into how does clojure -X:deps tree work and call it directly from your tool, to avoid dealing with temporary files.#2023-10-3010:00namenuuh no, diffing algorithm is okay. (by using simple set algebra)
Regarding clojure -X:deps tree, you probably want to specify :aliases argument either.
you want to compare only for :dev alias, or :test alias or for [:dev :test] alias, etc.
The library can't make any assumptions about this, so it has to compute every combination.#2023-10-3010:01namenuI just didn't want to go that path..#2023-10-0212:49jpmonettasHi everybody! Happy to share the first release of ClojureScriptStorm, a dev compiler that tries to bring the same experience as ClojureStorm does for Clojure (automatic instrumentation) to ClojureScript.
This dev compilers are created to improve the experience of using #flow-storm but are not coupled to it, so other tooling can be built on top of them.
It is a fork of the official ClojureScript compiler, with a patch on top to enhance it with automatic instrumentation. It currently supports cljs.main and shadow-cljs.
Here is the new user guide entry https://jpmonettas.github.io/flow-storm-debugger/user_guide.html#_clojurescript. If you want to try it, be aware that it requires shadow-cljs >= 2.25.4
The current coordinates are com.github.jpmonettas/clojurescript {:mvn/version "1.11.60-3"} which applies the patch over 1.11.60
and the latest FlowStorm is com.github.jpmonettas/flow-storm-dbg {:mvn/version "3.7.5"}
The project is currently hosted here https://github.com/jpmonettas/clojurescript/
If you want to use it for your own tooling, take a look at the current tests :
• https://github.com/jpmonettas/clojurescript/blob/cljs-storm/src/test/cljs/cljs/storm/utils.cljs#L17-L28
• https://github.com/jpmonettas/clojurescript/blob/cljs-storm/src/test/cljs/cljs/storm/functions.cljs, https://github.com/jpmonettas/clojurescript/blob/cljs-storm/src/test/cljs/cljs/storm/bodies.cljs, https://github.com/jpmonettas/clojurescript/blob/cljs-storm/src/test/cljs/cljs/storm/types.cljs
For any questions, issues or feedback show up in #flow-storm
Cheers#2023-10-0219:00jpmonettasSomeone asked on reddit if it worked with figwheel main. Looks like it does! Just tried the https://github.com/bhauman/flappy-bird-demo-new , recorded a little bit while the bird was flying and looks like it works fine.
Here you can see how I configured it : https://github.com/jpmonettas/flappy-bird-demo-new/commit/108d4c223288ea14033180fe424aff0f6146a78b#2023-10-0219:03jpmonettasThere is also this new functionality on the latest FlowStorm https://jpmonettas.github.io/flow-storm-debugger/user_guide.html#_limiting_recording that helps with high frequency functions, which is pretty common in ClojureScript when you have animations or code that fires on something like mouse moves.#2023-10-0217:31HuahaiDatalevin, a simple, fast and versatile Datalog database, version 0.8.20 is released, with a number of bug fixes and improvements. Thanks @danvingo for a bug fix. https://github.com/juji-io/datalevin#2023-10-0221:30uochanJust released antq ver 2.7.1133 Tool to point out your outdated dependencies.
https://github.com/liquidz/antq
Added support for accessing private repositories with GPG in Leiningen projects.#2023-10-0408:56flowthingv2023-10-03.333 of https://github.com/eerohele/tab, a little program that turns Clojure data structures into tables.
- Sort maps and seqs of maps by key
- Show expand/collapse controls when a seq of maps exceeds :print-length
- Reduce memory use and improve performance
https://github.com/eerohele/tab/blob/main/CHANGELOG.md#2023-10-03#2023-10-0413:37Roman LiutikovDocumentation and tooling update for UIx, a thin wrapper for modern React
• 📖 https://github.com/pitch-io/uix/blob/master/docs/react-native.md
• 🏁 Convert existing RN project to UIx in a single step, by running npx create-uix-app@latest {{app-name}} --react-native
• 🪝 Updated use-subscribehttps://github.com/pitch-io/uix/blob/master/docs/interop-with-reagent.md#syncing-with-ratoms-and-re-frame to interop with re-frame subscriptions
Join #CNMR41NKB for discussion, feedback and more updates#2023-10-0413:58henrikin React v18 the function is a part of the public API so there is no need to install the packageDoes this refer to useSyncExternalStore? Do I just drop it in place of useSyncExternalStoreWithSelector?#2023-10-0413:59henrikThis is regarding https://github.com/pitch-io/uix/blob/master/docs/interop-with-reagent.md#syncing-with-ratoms-and-re-frame#2023-10-0414:10Roman Liutikov@U06B8J0AJ good point, this part is misleading now since UIx API is React v18 compatible. "use-sync-external-store" is still needed, because useSyncExternalStoreWithSelector, defined in that package, takes a custom comparator function. In case of cljs it's cljs.core/=, which is needed for use-subscribe to work correctly, since state data is Clojure data structures. I've updated the docs.#2023-10-0414:11henrikOK, thank you for clarifying!#2023-10-0505:39flowthinghttps://github.com/eerohele/pp (v2023-10-05.5) is a pretty fast, single-namespace, no-dependency lib for pretty-printing Clojure/EDN data (not code).
It is primarily meant for tools that need to pretty-print Clojure evaluation results, but might be useful any time you need to pretty-print something fast.#2023-10-0507:52pesterhazyThis is great!#2023-10-0510:02Rupert (All Street)Small ✔️ , fast ✔️ , zero dependency ✔️. Looks good to me!#2023-10-0516:46borkdudepp works in bb
$ rlwrap bb -Sdeps '{:deps {io.github.eerohele/pp {:git/tag "2023-10-05.5", :git/sha "7059eec"}}}'
Cloning:
Checking out: at 5f7c68b70aea31561df62d0a56d8396dae8cc9d0
Babashka v1.3.185-SNAPSHOT REPL.
Use :repl/quit or :repl/exit to quit the REPL.
Clojure rocks, Bash reaches.
user=> (require '[me.flowthing.pp :as pp])
nil
user=> (pp/pprint {:a 1 :b 2 :c 3 :d 4} {:max-width 10})
{:a 1,
:b 2,
:c 3,
:d 4}
nil
babashka#2023-10-0516:48Rupert (All Street)Is there a bb way to call pp as a oneline bash call? Taking raw EDN from standard in and pretty printing it to standard out.#2023-10-0516:49borkdudeof course there! (brb)#2023-10-0516:51borkdude$ bb '(zipmap (range 10 ) (range 10))' |
bb -Sdeps '{:deps {io.github.eerohele/pp {:git/tag "2023-10-05.5", :git/sha "7059eec"}}}' -e "((requiring-resolve 'me.flowthing.pp/pprint) (clojure.edn/read-string (slurp *in*)) {:max-width 5})"
{0 0,
7 7,
1 1,
4 4,
6 6,
3 3,
2 2,
9 9,
5 5,
8 8}#2023-10-0516:53borkdude@U4ZDX466T Maybe good to add to non-goals: colored output (assuming you don't want this)#2023-10-0516:58Rupert (All Street)It works! Excellent I've added this as a an alias epp to my bash
alias epp='bb -Sdeps '"'"'{:deps {io.github.eerohele/pp {:git/tag "2023-10-05.5", :git/sha "7059eec"}}}'"'"' -e "((requiring-resolve '"'"'me.flowthing.pp/pprint) (clojure.edn/read-string (slurp *in*)) {:max-width 5})"'
bb '(zipmap (range 10 ) (range 10))' | epp
{0 0,
7 7,
1 1,
4 4,
6 6,
3 3,
2 2,
9 9,
5 5,
8 8}#2023-10-0517:00Rupert (All Street)Will be very handy for working with EDN from REST and in files.
(`curl https://example.com/abc.edn | epp` etc)#2023-10-0517:05flowthingHeh, pp does seem to work in bb, yes. 👍 The tests have some Clojure-specific things (as well as Transcriptor, which is Clojure-only), but those shouldn't be too difficult to sort out. I have an issue on that.#2023-10-0517:05flowthing@U04V15CAJ Good idea, thanks! Will add. 👍#2023-10-0517:51flowthingAlthough I suppose I could also release Tab's syntax highlighter as a standalone lib... that would make it pretty straightforward to add color support, too. Would just need to make it output ANSI escape sequences in addition to Hiccup/HTML. :thinking_face:#2023-10-0517:54borkdude@UJVEQPAKS jet also does this btw (and it outputs colorized output) #CM5HRADAA#2023-10-0519:06Rupert (All Street)Nice! I'll put that to use too.#2023-10-0614:02mpenetnice#2023-10-0614:02mpenetwe now use it on https://github.com/exoscale/lingo (for clj, not cljs)#2023-10-0614:04flowthingCool, thanks for letting me know! Appreciate it. 🙂 Mind if I add that in pp's README?#2023-10-0614:05mpenetplease do 🙂#2023-10-0614:29Roman LiutikovHappy Friday everyone. Excited to announce that UIx has reached its first major version. Originally created in 2019, then reworked at Pitch, now I feel that it fully meets my personal and Pitch's needs, (and other orgs who's using it, otherwise let me know if I should rewrite it again). The kid has grown! 🐣
👉 Here's the https://github.com/pitch-io/uix/blob/master/CHANGELOG.md#100
Notable changes:
• ☕️ JVM SSR output now matches react-dom/server output
• 🌯 Added cljs ns uix.dom.server wrapping react-dom/server
• 🪝 Added defhookhttps://pitch-io.github.io/uix/docs/hooks.html#creating-custom-hooks, mainly to allow linting for custom hooks
As usual, join #CNMR41NKB for discussion, feedback and more updates#2023-10-0620:56Alex Miller (Clojure team)https://github.com/clojure/tools.build v0.9.6 8e78bcc is now available
• https://clojure.github.io/tools.build/clojure.tools.build.api.html#var-write-pom - add :pom-data to supply extra pom data when generating a new pom (such as license info)
• https://clojure.github.io/tools.build/clojure.tools.build.api.html#var-uber - fix exclusions and conflict handling when including local deps on windows#2023-10-0700:01seancorfieldhttps://github.com/seancorfield/deps-new v0.5.3 c899135 -- a tool to create new deps.edn projects
• Updated to use tools.build 0.9.6 in generated projects, to take advantage of :pom-data
• Remove all the template pom.xml files from generated projects (no longer needed)
• clojure -Ttools install-latest :lib io.github.seancorfield/deps-new :as new will always get you the latest version!
Follow-up in #deps-new#2023-10-0707:07mpenetNew mina release, now targeting Helidon 4.0.0-RC1 - https://github.com/mpenet/mina#2023-10-0712:36mkvlrnice. Do you have plans for adding websocket support?#2023-10-0712:57mpenetYes, I was waiting for helidon’s api to stabilize. With that rc it seems to be the case so that will happen next#2023-10-0915:04mpenetI started to work on it yesterday fyi. Maybe I ll get an initial ws support release tomorrow.#2023-10-0915:25mkvlrgreat to hear!#2023-10-1107:31mpenetit's available now. It's experimental. I want in particular to change the way it works wrt to the way they are defined/upgraded, do something similar to ring ws spec or the other adapters (detect upgrade req and switch to ws from a normal handler). But right now I am not sure helidon allows to do this (easily).#2023-10-0707:08mpenetNew https://github.com/exoscale/lingo release now using https://github.com/eerohele/pp for pretty printing#2023-10-0707:45mpenetNew https://github.com/mpenet/spandex release - 0.8.2 - fixing a bug with the build process on 0.8.1#2023-10-0719:35seancorfieldhttps://github.com/seancorfield/honeysql 2.4.1078 -- Turn Clojure data structures into SQL:
• Address https://github.com/seancorfield/honeysql/issues/507 by clarifying formatting of :cast in *Special Syntax*.
• Fix https://github.com/seancorfield/honeysql/issues/505 by rewriting the helper merge function to handle both keywords and symbols properly.
• Address https://github.com/seancorfield/honeysql/issues/503 by adding :at-time-zone special syntax.
• Address https://github.com/seancorfield/honeysql/issues/504 for BigQuery support, by adding special syntax for ignore/respect nulls, as well as new :distinct and :expr clauses to allow expressions to be qualified with SQL clauses. The latter will probably be useful for other dialects too.
• Update tools.build to 0.9.6 (and get rid of template/pom.xml in favor of new :pom-data option to b/write-pom).
If you're using the quoted-symbol style of DSL but also using the helper functions, #505 is an important bug fix!
Follow-up in #C66EM8D5H#2023-10-0914:26chrisntech.ml.dataset - the columnwise in-memory data processing system for Clojure is now https://github.com/techascent/tech.ml.dataset. This includes a large upgrade - my high-performance datastructures library, hamf- is now version 2.0 with lots of experimental code removed and slightly faster hashmaps 🙂. We have several issues fixed since 7.000 and many many issues fixed since 6.XXX. Tomorrow I will be talking about TMD 7.000 and the pathway from 6 to 7 along with other high performance computing/Clojure topics - Please come ready with questions - we will have time for a (hopefully) lively discussion - https://www.meetup.com/london-clojurians/events/295843187/.#2023-10-0921:20Kathleen DavisHi folks, ballots are in for the Clojurists Together 2023 board election. Congratulations to the 2 board members who are returning (Daniel Compton and Heather Moore-Farley) and our 2 new board members, Felix Barbalet and Max Penet. Our https://clojuriststogether.us17.list-manage.com/track/click?u=26ebcffb0cf27fac7430ea3ff&id=fa22678149&e=e4a715f344 is 10th October 10 am Pacific Time. Please RSVP https://clojuriststogether.us17.list-manage.com/track/click?u=26ebcffb0cf27fac7430ea3ff&id=3370ea798f&e=e4a715f344 to receive a reminder and the Zoom Link.#2023-10-1109:41Peter Taoussanishttps://github.com/http-kit/http-kit (minimalist async HTTP client+server) v2.8.0-beta2 is https://github.com/http-kit/http-kit/releases/tag/v2.8.0-beta2 with:
• Auto Java 21+ virtual threads for client + server when available
• New benchmark suite with extensive results for client + server (incl. non/virtual comparisons)
• Support for Ring-style async handlers (thanks to weavejester!)
• Several small fixes, documentation improvements, and more
(Quick note: I don’t normally post announcements here but have recently had some requests to, so will try start doing for at least large releases 👍)
Cheers! 🙂#2023-10-1113:14Peter Taoussanishttps://github.com/taoensso/nippy (Clojure serialization lib) v3.3.0 final is https://github.com/taoensso/nippy/releases/tag/v3.3.0 with:
• Experimental transducer support during thaw, allowing fast+flexible data inspection/transformation. Enables some advanced use cases.
• Otherwise mostly small improvements (efficiency, documentation, etc.).
• Updated https://github.com/taoensso/nippy#performance (chart still needs updating for v3.3.0)
(This is the first major Nippy release since Jul 2022)
v3.4.0-beta1 is https://github.com/taoensso/nippy/releases/tag/v3.4.0-beta1 with:
• Significant performance improvements to all compression methods
• Support for http://facebook.github.io/zstd/
• An improved (faster, more accurate) freezable? util
Enjoy, cheers!#2023-10-1116:40nathanmarzWe've just released a first-class Clojure API for Rama. Rama is a new programming platform we released in August that enables end-to-end scalable backends to be built in their entirety in 100x less code than otherwise. It's a "programmable datastore on steroids" where you mold your datastore to fit your application rather than the other way around. This introductory blog post to the Clojure API culminates in building a highly scalable auction application with timed listings, bids, and notifications in only 100 LOC. https://blog.redplanetlabs.com/2023/10/11/introducing-ramas-clojure-api/#2023-10-1117:26Daniel JompheA quick comparison of the Java and Clojure API#2023-10-1117:43Daniel JompheThe following seems like a great summary of a “key” difference of Rama’s Dataflow language:#2023-10-1216:05Peter Taoussanishttps://github.com/taoensso/carmine (Clojure Redis client) v3.3.0 final is https://github.com/taoensso/carmine/releases/tag/v3.3.0 with:
• Significantly improved message queue https://github.com/taoensso/carmine/wiki/0-Breaking-changes#architectural-improvements and https://github.com/taoensso/carmine/wiki/0-Breaking-changes#api-improvements
• Native support for all the latest Redis commands
• Updated and expanded https://github.com/taoensso/carmine/wiki
• Various other fixes and improvements
(This is the first major Carmine release since Dec 2022)
Cheers! :-)#2023-10-1218:00Mark Wardlehttps://github.com/wardle/hermes/releases/tag/v1.4.1320 - Open-source SNOMED CT terminology library and server for healthcare. Changes since last announcement (May 2023):
• Much improved localisation support, with a new search index using locale-specific term folding (normalization), better diacritic support, and deferral of most choices to client at runtime rather than at time of index creation
• Improved error reporting
• Performance improvements, mainly attributable to latest Lucene, and Java 21 when used
• Improved tests using GitHub Actions, automatically downloading distributions and testing against latest releases
It's used in the UK, but I've now had reports of its usage from lots of places around the World, which is rather exciting.#2023-10-1304:54escherizehttps://github.com/escherize/huff (the bb-compatible Juicy Hiccup) now exposes the ability to extend (or contract) its grammar.
• Besides using a [function as a component], we now offer the ability to add tags.
◦ Tags parse and validate their contents using malli schemas (which you can optionally write).
• Read more about the https://github.com/escherize/huff#extendable-grammar.#2023-10-1318:37vemvCIDER 1.8.0 is out! https://github.com/clojure-emacs/cider/releases/tag/v1.8.0
Most prominently, it features improved support for Java completions, navigation, documentation, and stacktrace integration, via the revamped enrich-classpath tech which has evolved from humbler beginnings to being a more comprehensive solution.
We also feature misc new features, big and small, like CIDER Log mode, or quality-of-life improvements while running tests, among others.
Finally, and this cannot be understated, we have shipped tons of bugfixes - things that never quite worked as intended, had glitches or failed to be adapted to newer Emacs/Clojure trends just work now.
This is also good timing to upgrade cider-nrepl, clojure-mode, clj-refactor.el, refactor-nrepl, company-mode, and babashka-nrepl.
CIDER users are highly encouraged to check out the comprehensive CHANGELOG / release notes. Lots of care has been put in having up-to-date, interlinked https://docs.cider.mx/cider/index.html.
Enjoy!#2023-10-1318:40vemvYou can learn more about the collaboration that was the driving force behind many of these changes here: https://www.clojuriststogether.org/news/july-and-august-2023-long-term-project-updates/#ciderrepl-bohzidar-batsov#2023-10-1318:41Daniel JompheGreat description with useful instructions, thanks!#2023-10-1417:29escherizehttps://github.com/escherize/huff v0.1.8 is out!
bb-compatible Juicy Hiccup
• Now has the ability to create raw strings, while disallowing user-provided raw strings.
• Read more about them on the https://github.com/escherize/huff#raw-html-tag or the https://github.com/escherize/huff/issues/5.
• Side note: all releases run tests (in clj, and in bb) prior to a clojars deployment#2023-10-2118:50Jakub Holý (HolyJak)Nice! Looking at huff for the first time, I’d appreciate if the readme started with a Rationale section explaining what this is and why it is useful, and how it compares to alternatives. A list of features is nice, but hard without sufficient context. A question I immediately think of is Why not just hiccup?, and I have ti study to be able to answer it.#2023-10-1518:31gnlhttps://github.com/gnl/build.simple
tools.build's missing piece – install, sign and deploy libraries easily and securely like with Leiningen#2023-10-1518:32gnlMajor
• Babashka support \o/
• Tracing of anonymous functions and loop/recur
• Tracing+replay of re-frame handlers and subscriptions
• Support for tracing/replay of custom macros compatible with defn/`reg-fx`/,,,
• No longer requires ClojureScript in Clojure-only projects due to the potential for unpleasant dependency conflicts (h/t @domagala.lukas for the hint)#2023-10-1701:46weavejesterhttps://github.com/ring-clojure/ring has been released.
Notable changes in this release include:
• A WebSocket API has been added to the Ring specification
• The Ring Jetty adapter has been updated to Jetty 11 and given WebSocket support
• The provided dependency on Java servlets has been removed
• The minimum compatible Java version has increased from 1.8 to 11
This is a beta release intended for early adopters. The first RC is planned for next month.#2023-10-1710:39alexyakushevhttps://github.com/clojure-goes-fast/clj-async-profiler 1.1.0 is an important release that makes it easier to utilize the profiler's powerful dynamic transforms. Common transforms are now just a click away! More about the new features here: https://clojure-goes-fast.com/blog/clj-async-profiler-110/#2023-10-1710:46xificurC@U06PNK4HG there's a localhost link in the blog post#2023-10-1711:04alexyakushevOof, thanks, gonna fix that soon 😅#2023-10-1713:06Noah Bogartthis is a magnificent update#2023-10-1714:09avocadeThanks Alex, invaluable tool 🙌:skin-tone-2:#2023-10-1719:23borkdudehttps://github.com/squint-cljs/squint: ClojureScript syntax to JavaScript compiler
A lot happened in the last month!
0.2.25 - https://github.com/squint-cljs/squint/blob/main/CHANGELOG.md#0332-2023-10-17
• Add squint.edn support, see https://github.com/squint-cljs/squint/blob/main/README.md#squintedn
• Add watch subcommand to watch :paths from squint.edn
• Resolve symbolic namespaces (:require [foo.bar]) from :paths
• Make generated let variable names in JS more deterministic, which helps hot reloading in React
• Added a https://github.com/squint-cljs/squint/blob/main/examples/vite-react.
• Add bit-and and bit-or
• Include lib/squint.core.umd.js which defines a global squint.core object (easy to use in browsers, see https://github.com/squint-cljs/squint/blob/main/README.md#compile-on-a-server-use-in-a-browser)
• Add subs, fn?, re-seq
• Fix and and or with respect to CLJS truthiness
• Respect CLJS truth semantics: only null, undefined and false are non-truthy, 0 and "" are truthy.
• Fix dotimes
• squint repl improvements
• Do not resolve binding in catch to core var
• Fix reading .cljc files
• Allow passing JS object as opts in JavaScript API's compileString
Channel: #squint#2023-10-1801:39weavejesterhttps://github.com/ring-clojure/ring is out, hot on the heels of beta1.
A complexity issue with some of the WebSocket helper functions came up shortly after the first beta was released, and this version was released to resolve it.#2023-10-1813:49Ertugrul CetinMineREPL is released - Interactive 3D Tool for Learning Programming with Clojure: https://minerepl.com#2023-10-1814:22flowthingThis is really cool, and the user experience is lovely!#2023-10-1814:46borkdudeBased on https://2.maria.cloud it looks like :)#2023-10-1814:46flowthingThought it looked familiar. 🙂 #2023-10-1814:57Tomas BrejlaIt's lovely, looking forward to try it more in the evening 🙂
My first 2c:
1. shift-enter is used to evaluate. Could alt+enter work as well? (my muscle memory uses this combination)
2. immediately after I was introduced to W, A, S, D, I gave my character some momentum, switched to the (jump 1000) expression, evaluated it and... And I jump/slided out of the board. Now the poor fella is flying in the endless space. It might be a good idea to introduce (init) as soon as possible 😉 I found it by trial-and error.
I'll try the rest of the tutorial later.#2023-10-1816:18Ertugrul Cetin@U04V15CAJ yes true, it's a fork of Maria cloud#2023-10-1816:19Ertugrul Cetin@U01LFP3LA6P will address these, thanks for the feedback!#2023-10-1823:33joshuamzIt looks amazing! I really liked it. One thing though, in my browser (latest Firefox) I need to type in Shift + Enter twice for the expressions in the code block to evaluate. If I just pressed the combination once, it only enters a new line.#2023-10-1906:41Chris McCormickFantastic!#2023-10-1908:31Ertugrul Cetin@U02BATFPN78 thanks! will have a look to that issue#2023-10-1821:14pezHere’s a starter project for Interactive Programming, using #membrane to make things extra fun. https://github.com/PEZ/x-meta-image See also post in #news-and-articles about the video that shows how to use the project.#2023-10-1908:22roklenarcicMemento had a major release 1.1.49 which reduces call-stack size by a lot. More importantly, license has been changed from EPL to MIT. https://github.com/RokLenarcic/memento#2023-10-1908:24roklenarcicMemento Redis release 0.2.16 brings compatibility with Memento 1.1.x and license change from EPL to MIT. https://github.com/RokLenarcic/memento-redis#2023-10-1914:29jpmonettasHi everybody, happy to announce the creation of the which is now home of all flow-storm related
projects that were previously on my github. Additionally I also deployed artifacts for each project under the organization's name.
Here is a quick rundown of the new projects repos and their new artifacts :
• FlowStorm debugger: https://github.com/flow-storm/flow-storm-debugger , [com.github.flow-storm/flow-storm-dbg "3.8.1"]
• ClojureStorm: https://github.com/flow-storm/clojure, [com.github.flow-storm/clojure "1.11.1-11"] and [com.github.flow-storm/clojure "1.12.0-alpha4_5"]
• ClojureScriptStorm: https://github.com/flow-storm/clojurescript , [com.github.flow-storm/clojurescript "1.11.60-4"]
• Hansel: https://github.com/flow-storm/hansel, [com.github.flow-storm/hansel "0.1.79"]
• http://www.flow-storm.org landing page: https://github.com/flow-storm/flow-storm-landing
• CiderStorm: https://github.com/flow-storm/cider-storm
The user guide has also been moved here https://flow-storm.github.io/flow-storm-debugger/user_guide.html
Cheers!#2023-10-1921:27Daniel MiladinovI'd like announce https://github.com/danielmiladinov/burpless, a library I just released, for facilitating writing cucumber tests from Clojure#2023-10-2009:39mmerHi, I really like the explanation in your readme. However I was wondering how you cope with tearing down items that may have been created as part of the test?#2023-10-2117:21weavejesterhttps://github.com/ring-clojure/ring-websocket-transit has been released. This library provides Ring middleware for automatically decoding and encoding WebSocket messages using the Transit data format.
https://github.com/ring-clojure/ring-websocket-async has also been released. This library provides functions and macros for using core.async with Ring's WebSocket API.#2023-10-2119:32Alex Miller (Clojure team)https://clojure.org/news/2023/10/20/clojure-1-12-alpha5
Use locks instead of synchronized blocks around user code in lazy-seq and delay
Clojure users want to use virtual threads on JDK 21. Prior to 1.12, Clojure lazy-seqs and delays, in order to enforce run-once behavior, ran user code under synchronized blocks, which don’t participate in cooperative blocking. Thus if that code did e.g. blocking I/O it would pin a real thread. JDK 21 may emit warnings for this when using -Djdk.tracePinnedThreads=full. To avoid this pinning, in 1.12 we’ve changed lazy-seqs and delay to use locks instead of synchronized blocks.#2023-10-2119:37Alex Miller (Clojure team)Even if you're not on Java 21, this change may affect allocation and GC rates, so feedback is welcome if that's something you are able to A/B test#2023-10-2120:27borkdudeTested with bb and ecosystem libs, no problems found so far:
{:test 2356, :pass 14713, :fail 0, :error 0}#2023-10-2121:00seancorfieldPushed it into our CI. If there are no problems we'll run it on QA for a bit, then push to production. We're on JDK 20 right now (awaiting official JDK 21 support from New Relic before we can update) but we have --enable-preview and could also test vthreads...#2023-10-2122:27seancorfieldPasses all our tests so it's on our QA system now.#2023-10-2215:43staypufdFor those testing, you may want to check performance as well if you have portions of your code where that is an important concern.
I mention this because I was reading about this a bit more and one article I read said their performance testing showed between 2 - 7.5x performance difference between synchronized and locks. It may be just that their test was simple or whatnot, but I thought it may be worth mentioning. The performance difference may be offset by the gains you get via virtual threads as well. Additionally, we all know that performance tends to be problem specific and such as well.
@U064X3EF3 probably has better info on what they see in regards to performance with locks.#2023-10-2215:47Alex Miller (Clojure team)That does not match what we found in testing but it is definitely complicated, and varies significantly depending on jdk#2023-10-2215:48staypufdThanks Alex. I knew you’d know more#2023-10-2215:50Alex Miller (Clojure team)In Java 21, we found generally that lock/unlock was significantly faster with RL but reentrant locking (which we are no longer doing) was slower. There is a cost to allocation though and generally I think the seq realization is a bit slower, but seq walking is now faster (due to refactoring to streamline the realized path)#2023-10-2215:51Alex Miller (Clojure team)But those numbers vary on older jvms, particularly pre-15 with biased locking#2023-10-2215:52Alex Miller (Clojure team)In summary, it is really complicated and hard to predict exactly how it affects any particular application, so please test!#2023-10-2216:03seancorfield> reentrant locking (which we are no longer doing) was slower.
>
Could you clarify/elaborate on this? The change in the code seems to be replacing synchronized with use of a ReentrantLock...#2023-10-2217:01Alex Miller (Clojure team)Prior, seq() called sval(), both were synchronized so you reenter the lock (lock something already locked), that never happens now. Reentrant locking with synchronized seems basically free but reentrant locking with RL seems to still have some costs with unlock signaling #2023-10-2217:03staypufdThanks Alex. That makes it clearer. #2023-10-2217:10Alex Miller (Clojure team)Tbh, it is kind of shocking that virtual threads went out without consideration of all this. Lots of Java code just assumes reentrant synchronization is cheap/free#2023-10-2217:12seancorfieldI wonder if fewer people tested them in preview in real world situations than they expected? It seems that they knew about the locking/pinning issues but considered them minor...#2023-10-2217:23staypufdFrom the JEP
“The scheduler does not compensate for pinning by expanding its parallelism. Instead, avoid frequent and long-lived pinning by revising synchronized blocks or methods that run frequently and guard potentially long I/O operations to use java.util.concurrent.locks.ReentrantLock instead. There is no need to replace synchronized blocks and methods that are used infrequently (e.g., only performed at startup) or that guard in-memory operations. As always, strive to keep locking policies simple and clear.”
Still not that clear and their solution is ReentrantLocks, which as Alex pointed out seems to still have issues. Seqs would seem to be in memory guarded objects wouldn’t they? Would they consider our “user code” frequent or long lived? I guess so since in Clojure we use seqs for so much. Regardless, thanks to the team for bringing this capability to the Clojure Community. One more amazing reason that using Clojure is so amazing. #2023-10-2217:33staypufdThis comment on StackOverflow seems to talk about the implementation a bit.
https://stackoverflow.com/a/76788835#2023-10-2217:34staypufdThanks again for the info Alex#2023-10-2217:38staypufdJust found this from an August of this year. Maybe they mention some of these things. I’m gonna watch, and thought you all may enjoy it as well.
https://youtu.be/WsCJYQDPrrE?si=S401YxgC8ocNNwue#2023-10-2218:09Alex Miller (Clojure team)> Would they consider our “user code” frequent or long lived?
Since this is user code, it can be anything, so it must be presumed that it can be long lived (certainly also true for delay)#2023-10-2218:13Alex Miller (Clojure team)There are a number of other uses of synchronized in Clojure but most of those are protecting field access (short lived) and we have no plans to modify those, they should be fine.#2023-10-2218:22Alex Miller (Clojure team)that talk is a good overview. another related issue you might ask about after watching that is ThreadLocals and I have another small change for that queued up in https://clojure.atlassian.net/browse/CLJ-2803, but I don't think it's critical#2023-10-2718:55staypufdThanks again for chatting about this. I learned quite a bit about this stuff from investigating this and all the comments.#2023-10-2218:17phronmophobicAnnouncing https://github.com/phronmophobic/clogif v1.3: Create gifs in clojure!#2023-10-2219:35Jakub Holý (HolyJak)Can your share source for the gif above? 🙏#2023-10-2219:36phronmophobicsure, i’m away from keyboard, but I can make it available somewhere in a bit#2023-10-2220:03Jakub Holý (HolyJak)Thank you!#2023-10-2220:29phronmophobicOk, I put the code on github, https://github.com/phronmophobic/clogif/blob/67f04a0cd28edae728b200954cfad13cf3aeb137/examples/code2gif/src/com/phronemophobic/code2gif.clj#L36#2023-10-2220:31phronmophobicI'm sure there's a cleaner way to do it, but I just wanted to throw something together quickly.#2023-10-2315:37Jakub Holý (HolyJak)👀#2023-10-2407:47uochanJust released build.edn ver 0.11.241, Library making your Clojure library build process easy.
https://github.com/liquidz/build.edn
Added :licenses option to generate licenses tag in pom.xml.#2023-10-2502:01Fabio Domingueshttps://github.com/fabiodomingues/clj-depend: A Clojure namespace dependency analyzer.
0.9.2 (2023-10-24)
• https://github.com/fabiodomingues/clj-depend/issues/46: Fix false violation when using :access-layers due to dependency on namespaces not defined in layers.
• https://github.com/fabiodomingues/clj-depend/issues/44: Fix not creating snapshot file when clj-depend folder does not exist.#2023-10-2511:33Noah BogartI don’t think @zk is active on Slack, so I’ll announce for him that https://clojuredocs.org/ is updated to Clojure 1.11!#2023-10-2512:04eval2020I remember that PR 🙂 Kudos to @zk for deploying it - as became clear from the dev-notes in the repository there were lots of infra-changes required.
Curious about code examples that will be added for the vars introduced in https://www.clojure.org/news/2022/03/22/clojure-1-11-0!#2023-10-2514:09Eugenthank you!
I noticed that some time ago and reported here asking if someone knows him.
Glad it's done#2023-10-2514:11Noah Bogartjust in time for 1.12 to be released 😉#2023-10-2514:28jpmonettasHere are instructions on how to debug your #CLX41ASCS scripts using #C03KZ3XT0CF !
https://flow-storm.github.io/flow-storm-debugger/user_guide.html#_babashka#2023-10-2517:50mynomotoAnnouncing https://github.com/hoplon/hoplon 7.3.4
Hoplon is a time-tested clojurescript library that present a simpler way to design and build single-page web applications. You can see it in action on https://hoplon.io/.
We recently updated the docs to help new users to get started, including creating a https://github.com/hoplon/project-template. Join #hoplon if you have questions or need some help.#2023-10-2521:31pezFor people curious about #polylith, here is an easy way to give yourself a full Clojure REPL connected development environment with an example Polylith project with a few clicks. (Three clicks I think it is). It will run in your browser. Zero install and all that. And it’s not just any example. It’s the mother of all examples, Yes RealWorld, it is @furkan3ayraktar’s example that we have Gitpodified. You will be dropped into a getting_started.clj file with some forms to throw at the REPL. This is V1. We intend to iterate on it. Your feedback is important! 🙏 ❤️ polylith https://github.com/furkan3ayraktar/clojure-polylith-realworld-example-app/blob/master/gitpod.md#2023-10-2522:41seancorfieldThat's cool! I've been using GitPod on some of my projects for a while but @U09M90GKX showed me that you can also do it via GitHub's built-in stuff -- which is how my usermanager example is set up now.
Here's the PR that they submitted: https://github.com/seancorfield/usermanager-example/commit/97c7a9889a18e2115140699d2b59b5da8b334515#2023-10-2605:42tengstrandYes, this is really cool!#2023-10-2606:19furkan3ayraktarThanks for putting your time into this, @U0ETXRFEW 🙏 #2023-10-2608:07pezSomething to repost: https://x.com/pappapez/status/1717452272123146535?s=20 ❤️#2023-10-2609:07pezAnd one for LinkedIn if that’s where you prefer helping promote Clojure things. https://www.linkedin.com/posts/cospaia_polylith-realworld-clojure-activity-7123233134027956224-wXy3?utm_source=share&utm_medium=member_desktop#2023-10-2613:01avocadeNice Peter, very useful!#2023-10-2614:11Carsten BehringIndeed cool, but keep in mind that GitPod is not free. (but has a large free tier)
devpod allows a similar experience , but free, but requires installation of a local tool...
https://devpod.sh/open#https://github.com/microsoft/vscode-remote-try-java
It can be free because it has no servers to run the workloads, they run on users hardware.
But the "One-click" experience can be similar.#2023-10-2614:32pezGitpod is free for some limited use. Like for trying out something like what we want people to try here. The page does inform about that Gitpod free hours are limited, and offers some little advice about what the users can do if they run out of hours.#2023-10-2614:40pezI’m happy to try other services out for these things. So far Gitpod creates the slickest, least confusing experience, imho. Sign up/in with Github account -> create workspace -> BOOM. Codespaces has the potential to be as slick, but it puts up a banner about that I will be charged. Now that I know that I actually have free hours I will try what I can create with it, but as long as that banner is there, I will choose Gitpod. (Github has my credit card, so I can’t be as fearless in my usage there as I can with Gitpod, which has never asked for a way to charge me.)#2023-10-2614:40Carsten BehringCodeSpaces (based on the same standard as DevPod and using VSCode in Browser as well) and GitPod have a free tier:
https://docs.github.com/en/billing/managing-billing-for-github-codespaces/about-billing-for-github-codespaces#monthly-included-storage-and-core-hours-for-personal-accounts
https://www.gitpod.io/pricing
120 vs 50 hours per month
Both large enough for quick trials.#2023-10-2615:48seancorfieldSo GH CodeSpaces gives you more for free than Gitpod? Good to know. I don't even remember seeing pricing for Gitpod (and I've been using it for ages).
@U7CAHM72M is there a dev containers related channel?#2023-10-2620:00Carsten Behringno, but might be good to create one.#2023-10-2620:37pezRename the #C02B57JT7QF channel?#2023-10-2620:41pezIt’s partly that you don’t see anything about pricing with Gitpod that makes it so sweet for try-this-thing-in-the-browser, imo. Also @U04V70XH6, they have a generous open source program. I have more hours than I would ever need there. Free of charge, even of the mention of charge.#2023-10-2611:27Christian Johansenno.cjohansen/fontawesome-clj is a new library for easily rendering https://fontawesome.com/ icons to hiccup in Clojure and ClojureScript: https://github.com/cjohansen/fontawesome-clj#2023-10-2619:43Lidor CohenHi @U9MKYDN4Q, Recently we came to realize that using font-awesome's icons dynamically (using strings) has extremely bloated our bundle size.
Looking at your library it seem somewhat dynamic (you can use keyword to render any icon without explicitly requiring it).
Do you know if it has any effect on the bundle size?#2023-10-2619:50Christian JohansenYes, in ClojureScript you use the icons/icon macro around the icon name, refer to the examples in the Readme. Only the icons you use this way will be included in the bundle.#2023-10-2706:57p-himikThe CLJS-related code seems to rely on some fontawesome-icons resource that isn't there, which results in:
Encountered error when macroexpanding fontawesome.icons/icon.
IllegalArgumentException: Cannot open <nil> as a Reader.
#2023-10-2706:57p-himikAh, that's what I get for not reading the whole README. :)#2023-10-2707:03p-himikYou have probably spent more time on this than I have, but aren't FA's free icons suitable for inclusion in your own sources? Since they're licensed as "CC BY 4.0". The trade-off, of course, is that doing so would shift the work from the users of your library to you when updating to a newer version of FA.#2023-10-2707:38Christian JohansenAh, maybe I can include the free ones then. I'm away for the weekend but will look into it next week! 👍 😊 #2023-10-2700:03NikiA library to easily roll out your own implementations of built-in Clojure data structures: https://github.com/tonsky/extend-clj/. Only supports Atoms for now, might add more down the line#2023-10-2702:01Howon LeeReleasing https://github.com/howonlee/mertonon - Mertonon is at https://github.com/howonlee/mertonon/releases/tag/v0.9.65-postprealpha now. Mertonon is a new way to plan and budget for orgs. With Mertonon, you make a picture of your org as a neural network. You do this by going on Mertonon and linking together local, political, human judgements of impact with respect to KPI's. Then, Mertonon itself will suggest changes to your budget based upon those judgements. If you know about Project Cybersyn / Synco (https://en.wikipedia.org/wiki/Project_Cybersyn), this is an attempted modern version for capitalist or noncapitalist use by ordinary folks.
Notable changes this release compared to 0.0.1-prealpha include
• Accounts don't not exist anymore
• Editing things
• Another material rewrite of the frontend that actually stuck, this time with re-frame
• Nonlinear weight editing (weight treatment was always nonlinear, neural nets are nonlinear)#2023-10-2702:21Howon Leeif peeps are feeling it, i'd like any feedback you have on that one-paragraph spiel, btw#2023-10-2709:46Bingen Galartza IparragirreJust released a new https://github.com/gethop-dev/object-storage.core implementation for Azure Blob Storage (which also supports AWS and FTP storage). The library allows managing objects (create, replace, copy, delete and generate presigned-urls) in Azure Blob Storage. It relies on the HTTP API, so the Azure SDK is not used/required.
https://github.com/gethop-dev/object-storage.azure-blob-storage#2023-10-2710:58borkdudeThe sci.configs project has ready-to-go configurations for #sci for several projects. This week I added a configuration for #hoplon
Try it out here:
https://babashka.org/sci.configs/?gist=e83da19df3d2739861334171779f79d5
Repo: https://github.com/babashka/sci.configs
The hoplon config might be a tad incomplete, so feel free to poke me if you need something added.#2023-10-2719:11stephenmhopperI decided to open source an object pool library that I wrote. It's called clj-pool-party and you can find it https://github.com/enragedginger/clj-pool-party. Feedback is most welcome.#2023-10-2719:18Alex Miller (Clojure team)Have you actually found object pooling to be a win perf wise? I feel like every time I try it the caching and/or concurrency aspects end up making it slower than not pooling #2023-10-2719:35stephenmhopperMy main use cases are pooling connections / clients to external resources (APIs / databases). So it's been useful in those situations (especially if I need to limit the total number of concurrent connections).
I'm curious though. In what situations have you tried object pooling and found that it made performance worse?#2023-10-2719:48Alex Miller (Clojure team)Been a while, don’t remember. Always seems like the complexity of it is not worth the trouble#2023-10-2720:03stephenmhopperNo worries. If you remember, let me know.
FWIW, simplicity was a goal of mine with this library. You just need a 0-arg generator function and a maximum size for the pool, and then you can pass functions to with-object to have them execute in the context of an object from the pool. Everything else is handled for you. There's extra parameters you can pass in for things like timeouts and health checks if that's required for your situation.
;;construct a pool that always generates 5 as the object and has a max size of 10
(def pool-ref (pool-party/build-pool (constantly 5) 10))
;;Run a function in the context of an object from the pool
(pool-party/with-object pool-ref
(fn [obj]
(println "borrowing obj:" obj)))
#2023-10-2720:07Jose GomezHi Stephen! I was actually looking for an object pool library a few days ago, will give it a try.#2023-10-2812:57stephenmhopperI just pushed a number of updates / improvements to the docs.
> Have you actually found object pooling to be a win perf wise? I feel like every time I try it the caching and/or concurrency aspects end up making it slower than not pooling
Per your question, I added a section to the README about the performance boost I'm seeing in one use case of clj-pool-party#2023-10-2815:45jpmonettasI haven't tried, and maybe my reasoning is wrong, but let's say you are processing real time frames coming from opencv, if you grab the frame objects from a pool and just replace the pixel array content instead of creating new frame objects every time, shouldn't this improve processors cache usage, since the frames memory are always the same and stay in L1 or something?#2023-10-3100:04skynetthis is neat @U0M7A18V6 I'm going to start trying it for my use case:
a remote service which only allows sessions for auth, has a very low limit on total sessions, doesn't have a way to check if a session is still alive (apart from: make request, does it succeed/fail?)
so object pooling seems like a pretty good fit#2023-10-2812:57stephenmhopperI just pushed a number of updates / improvements to the docs.
> Have you actually found object pooling to be a win perf wise? I feel like every time I try it the caching and/or concurrency aspects end up making it slower than not pooling
Per your question, I added a section to the README about the performance boost I'm seeing in one use case of clj-pool-party#2023-10-3009:18oliyI'm pleased to announce the release of https://github.com/oliyh/oxbow 0.1.6
Oxbow is an SSE client based on js/fetch, allowing you to use the full feature set of fetch and not be constrained by the old js/EventSource (which cannot e.g. send headers).
This release fixes a bug with buffering messages split across multiple events, and a related bug with UTF-8 support (huge thanks to @dj942 )#2023-10-3020:41Isaac BalloneHey! I created a library for interfacing with CouchDB called Slouch.
Slouch documents implement IAtom so you can use swap!, deref, etc. just like a regular atom. The implementation felt really natural because CouchDB and Clojure atoms both take an optimistic concurrency approach.
I'm always looking for constructive criticism. Excited to share this 🙂. I plan on improving this more in the coming month, mostly on the testing side, and creating a demo site to put it through its paces
https://github.com/balloneij/slouch#2023-10-3111:40ericdalloclojure-lsp Released https://clojure-lsp.io/ 2023.10.30-16.25.41 with fixes and performance improvements!
Main highlights:
• Performance: Less analysis saved in memory and cache affecting big projects
• Performance: new oracle graalvm 21 with pgo instrument which considerable improve overall performance (LMK if any weird crashes with the binary)
• Feature: The new paredit refactorings are part of clojure-lsp-intellij work, but it's intended to be used on multiple editors without custom paredit plugins.
More info on #lsp
Thank you clojurists-together and all for the support!
Happy code!#2023-10-3114:52igrishaevThere is a new 0.1.10 release of the https://github.com/igrishaev/pg, a Postgres client in pure Clojure. In addition to several minor improvements, there is a sub-package to integrate the client with HoneySQL. Docs: https://github.com/igrishaev/pg/blob/master/doc/100-honey.md#2023-10-3115:47Kathleen DavisOctober project updates are posted. https://www.clojuriststogether.org/news/october-2023-project-updates/ including Biff (Jacob O'Bryant), Bosquet (Zygis Medelis), Clojure Camp (Daniel Higginbotham), Deps-try (Gert Goet), GDL (Michael Sappler), Jank (Jeaye Wilkerson), Neanderthal (Dragan Duric), and Quil (Jack Rusher and Charles Comstock).#2023-10-3116:22Peter TaoussanisMy Clojure open source update for Sep-Oct 2023: https://www.taoensso.com/news/2023-10-open-source funded by Clojurists Toghether, Nubank, and others - thank you!
Work included 14 releases for existing libraries, and development on 2 new libraries planned for Nov+Dec release.#2023-10-3120:13jpmonettasHi everybody, added some documentation to ClojureStorm, for people interested in building tools on top of programs execution traces.
ClojureStorm is a fork of the official clojure compiler with some extra code added to make it a dev compiler.
This means a compiler with some extra capabilities tailored for development.
https://github.com/flow-storm/clojure#2023-10-3120:52jpmonettasJust updated the same documentation for ClojureScriptStorm, which people can use to build tooling on top of programs execution traces for ClojureScript.
https://github.com/flow-storm/clojurescript#2023-10-3123:29Kimo#2023-11-0112:22ericdalloclojure-lsp Released https://github.com/clojure-lsp/clojure-lsp-intellij 0.13.0!
This version is more stable than initial announcement, now with paredit features, fixes and better troubleshooting!#2023-11-0113:06bozhidarnREPL 1.1 is out with built-in support for TLS connections and one small bug-fix! You can read about the new functionality here https://nrepl.org/nrepl/1.1/usage/tls.html The release notes are here https://github.com/nrepl/nrepl/releases/tag/1.1.0 Enjoy! cider#2023-11-0209:34PawełA library for Dockerfile generation from Clojure or Babashka. Think Honey SQL for Dockerfiles: https://github.com/PawelStroinski/dockerfile-stevia
Main features:
• Hiccup-like and functional syntaxes
• Multi-step && commands
• Here-Documents
• Exec forms
• Map arguments#2023-11-0213:20borkdudehttps://github.com/babashka/babashka: Native, fast starting Clojure interpreter for scripting babashka
Lots of small additions and bugfixes in this release, but the most exciting new feature is this one:
• https://github.com/babashka/babashka/wiki/Self-contained-executable#uberjar
https://github.com/babashka/babashka/blob/master/CHANGELOG.md#13186-2023-11-02
• Add java.security.KeyFactory, java.security.spec.PKCS8EncodedKeySpec, java.net.URISyntaxException, javax.crypto.spec.IvParameterSpec
• Fix babashka.process/exec wrt babashka.process/*defaults*
• https://github.com/babashka/babashka/issues/1632: Partial fix for (.readPassword (System/console))
• Bump httpkit to 2.8.0-beta3 (fixes GraalVM issue with virtual threads)
• Bump deps.clj and fs
• Expose taoensso.timbre.appenders.core
• nREPL: implement ns-list op
• SCI: optimize swap!, deref and reset! for normal atoms (rather than user-created IAtoms)
• Add test for https://github.com/babashka/babashka/issues/1639
• Upgrade to GraalVM 21.0.1
#2023-11-0222:35oliycarmine-streams 0.2.2 has just been released 🎉
carmine-streams is a library that sits on top of carmine to provide a higher level api for working with redis streams
This release improves:
• Connection error handling https://github.com/oliyh/carmine-streams/issues/18
• More graceful shutdown when dealing with unblocks and interrupts https://github.com/oliyh/carmine-streams/issues/17
• Documentation discouraging use of future https://github.com/oliyh/carmine-streams/issues/16
If you are upgrading from 0.1.x please read the UPGRADE guide as there are breaking changes to the API from 0.2.0
https://github.com/oliyh/carmine-streams#2023-11-0309:39plexusOvertone 0.11.0 has been released 🎶 Overtone is a (live) music coding environment for Clojure. This is the first release in 4.5 years, many thanks to everyone who contributed!#2023-11-0309:40plexus• Official channel: #C053Q1QSG
• Mailing list: https://groups.google.com/g/overtone#2023-11-0309:40plexusCHANGELOG
• Fix overtone.music.pitch/dec-last (#437)
• Return notes in ascending order in overtone.music.pitch/chord
• Fix printing of huge map when calling instruments with Cider (#432)
• Fix size checks to multichannel buffer writes (#338)
• Add clj-kondo support (#493)
• Fix broken version comparison in args/SC-ARG-INFO (#449)
• OSC: use #getHostScript to fallback on hostname string (#450)
• Upgrade dependencies (#456)
• Add support for the grain-buf ugen (#470)
• use canonical URL for freesound API (#479)
• Fix window paths to allow downloading samples (#487)
• Removed obsolete JVM option CMSConcurrentMTEnabled (#488)
• Read synthdef files correctly (#489)
• Fix buffer reading (#490)
• Add clj-kondo support (see overtone.linter) (#493)
• Qualify the overtone ns in lein example (#495)
Contributors: Andréas Kündig, dvc, Hlöðver Sigurðsson, Lee Araneta, Markku Rontu, Matt Kelly, Nada Amin, Paulo Rafael Feodrippe, Perry Fraser, Phillip Mates, Wesley Merkel#2023-11-0310:00plexusGo forth and create beautiful things!#2023-11-0311:09pfeodrippeWow! Thank you so much, Arne!!! This is so great#2023-11-0313:49Ben SlessWill it work with clojure 1.11?#2023-11-0314:38plexusYes.#2023-11-0315:30richiardiandreaWow, that's awesome thanks2#2023-11-0613:01avocadeBravo 👏:skin-tone-2: #2023-11-0313:40Alex Miller (Clojure team)Clojure Deref for Nov 3, 2023 https://clojure.org/news/2023/11/03/deref#2023-11-0314:07vlaaadHey, this is not a project or library update 😛#2023-11-0314:21pezLots of project and library updates, tho! 😃#2023-11-0314:44Alex Miller (Clojure team)Oops, put it in the wrong place, sorry!#2023-11-0315:08plexusI guess overtone will be in the next one 🙂#2023-11-0316:06Alex Miller (Clojure team)Yep#2023-11-0317:07hiredmanhttps://git.sr.ht/~hiredman/tagbody ¯\(ツ)/¯#2023-11-0317:10Noah BogartThis looks great.#2023-11-0317:16hiredmanthat is very kind, thank you#2023-11-0317:26seancorfieldI love the group ID -- so appropriate 🙂#2023-11-0317:44Noah Bogartusing clojure.asm is pretty wild. What made you decide to go that route instead of "normal" clojure? did you see performance benefits?#2023-11-0317:46hiredmanthe generated bytecode causes exceptions that are thrown by go to jump right to where the label is, which you can't do with clojure#2023-11-0317:47Noah Bogartthat's very clever#2023-11-0317:50henrikIs this for those who long for the days of BASIC?#2023-11-0317:50henrikI might be in the target audience#2023-11-0317:50hiredmanthere are ways you could emulate it in clojure, using a try/catch around a loop over a case, similar to what core.async's go macro does, but I wanted to use the capabilities the jvm exposes as directly as possible, without emulating features of the jvm that aren't exposed in clojure using features of clojure#2023-11-0317:53bronsalmao. nice#2023-11-0317:54Noah Bogartjvm bytecode is very strange. i gotta read up on it to get why/how it all works#2023-11-0317:59hiredmanI think the bytecode pattern it uses isn't even representable in java either#2023-11-0318:00seancorfieldHave you tried java-decompiling the generated bytecode? I'm curious what it makes of it... 🙂#2023-11-0318:42hiredmanI have not, just javap#2023-11-0319:29Joshua SuskaloI highly recommend adding a new throwable type for this so that you can elide stacktrace creation#2023-11-0319:30Joshua SuskaloThis looks really cool though!#2023-11-0319:33hiredmanIt generates a new throwable subtype for every label, I don't have it eliding stacktrace construction, but it creates all the instances once up front and just rethrows the same instances as needed#2023-11-0319:34Joshua SuskaloOh that's good to know, I hadn't quite realized that it would rethrow the same throwable each time#2023-11-0319:35alexyakushevWait, didn't you flame Joshua for using Errors for flow control in his library? I am confused now.#2023-11-0319:38hiredmanAs I recall I was defending my practice of catching Throwable#2023-11-0319:42alexyakushevYes, you were, I remember now. And that would not be an issue here because these gotos are local to a single stackframe, right?#2023-11-0319:45hiredmanOh, no it totally could be an issue, it throws throwables, and exposes those throwables for throwing in the dynamic extent of tagbody#2023-11-0319:47hiredmanAnything using throwables for jumps has potential issues when composed with other code#2023-11-0822:53dpsuttonreading through this, the limitation for 255 forms comes from using a function for each form right? If that was changed to group all the forms into a single function between labels would the limitation jump to 255 labels?#2023-11-0822:55hiredmanthe limitation is because each form is wrapped in a function, and then each function is passed as an argument to a static method, and that static method runs each function in turn with the exception handlers and what not set up#2023-11-0822:55hiredmanthe jvm has a limit of 255 method parameters#2023-11-0822:56hiredmanand it becomes 254 because I tack on an extra nil form at the end for reasons#2023-11-0822:56dpsuttonright. that’s what i was wondering if all of the bodies between labels were accumulated into a single function then the limit would be the number of labels (ie form groups instead of forms)#2023-11-0822:56hiredmannot why that would be the limit?#2023-11-0822:57hiredmanI haven't looked into a ton, but I did skim the jvm spec on exception handlers the other day and did not immediately see any limitation to how many exception handlers you can have#2023-11-0822:57hiredmanah, I see#2023-11-0822:58hiredmanyou are saying basically automatically grouping with do#2023-11-0822:58dpsuttonyeah. just make the ones between labels into one function instead of N functions#2023-11-0822:58hiredmanI could, or just tell anyone who runs into the 254 limit to use do#2023-11-0822:59dpsuttonhaha yeah. i was checking my understanding. love reading this code and was just wondering#2023-11-0823:00hiredmansomething I have wondered about a little is if I could mess with internal compiler state enough to have it generate the bytecode for each body inside the runner class, and there by avoid having to wrap things as fns and pass them in#2023-11-0823:01hiredmanbut that seems very intense (might involve writing a subclass of ObjExpr or something)#2023-11-0823:01dpsuttonwould make a great keynote#2023-11-0318:19chrisnReleased ham-fisted 2.010 which contains an extensible primitive typed let system and helpers to invoke primitive functions - both of which are aimed at removing boxing from tight loops - https://github.com/cnuernber/ham-fisted/. hamf already contains a *-array macros that will inline array creation so - combined with the let statement - you can use arrays as tuples and get the full expected performance and of course eliminate boxing from tight loops.
For example of typed let and primitive-invoke pathways see https://github.com/cnuernber/ham-fisted/blob/master/test/ham_fisted/hlet_test.clj.
#2023-11-0413:33alexyakushevcompliment-lite is a trimmed-down single-file version of Compliment, Clojure's most gallant completion library. If you need to implement code completion in your project and, for any reason, don't want to add a dependency on Compliment, consider picking compliment-lite. It supports most completions that Compliment provides: vars, namespaces, classes, static and non-static class members, keywords. See https://github.com/alexander-yakushev/compliment/tree/master/lite.#2023-11-0416:46MattiasForgive a really, really naive question for the curious newbies - I see Compliment is written in Clojure. How do Emacs, VSCode and the rest execute it? How would my hypothetical new doubleplusgood editor use it? 😬🙂#2023-11-0416:55alexyakushevIt is a valid question! Emacs Clojure IDE called CIDER has a "frontend" part, written in Emacs Lisp, which lives in the editor, and the "backend" part, called cider-nrepl, written in Clojure. The backend part is injected into the application you are currently working on and have a REPL of it running. In case of VSCode, I think it also uses cider-nrepl as the IDE backend. This is the similar concept to LSP; however, LSP implementations usually run in a separate process, whereas Clojure IDE backends such as cider-nrepl run within the same process as the application being developed.#2023-11-0416:58alexyakushevSo, if you were to develop an editor and wanted it to support Clojure, your best bet would be to take cider-nrepl and then write editor code that interacts with it to provide the various functionality expected from an IDE. Or, you could create an IDE backend from scratch.#2023-11-0418:02MattiasOk, very cool, thanks for explaining. I’m trying to understand all of it better. 😄#2023-11-0517:41Žygimantas MedelisA small lib to help you get HuggingFace datasets
https://github.com/zmedelis/hfds-clj#2023-11-0609:45Wout Neirynckhttps://github.com/monkey-projects/oci-sign has been updated with a small fix regarding url-encoding query params. I'm also working on related libs for invoking the OCI api in a Clojure-way, but more on that later.#2023-11-0614:16weavejesterhttps://github.com/ring-clojure/ring has been released.
Notable changes in this release include:
• A WebSocket API has been added to the Ring specification
• The Ring Jetty adapter has been updated to Jetty 11 and given WebSocket support
• The provided dependency on Java servlets has been removed
• The minimum compatible Java version has increased from 1.8 to 11
If no major issues are found, this release candidate will become a full release by December.#2023-11-0710:45mike_ananevDoes Ring support virtual threads?#2023-11-0715:40weavejesterThe included Ring adapter is based on Jetty 11, which doesn't have virtual thread support. However, there are third-party adapters like https://github.com/sunng87/ring-jetty9-adapter and https://github.com/http-kit/http-kit, that do support virtual threads.#2023-11-0615:00Kathleen DavisHi all. The call is out for proposals for Clojurists Together's next round of funding ($44K - 8 projects). Deadline Nov. 24th. Check our website for more information and our latest survey. https://www.clojuriststogether.org/news/call-for-proposals.-november-2023-member-survey/#2023-11-0717:40eval2020First release of https://github.com/eval/bbangsearch, a CLI for DuckDuckGo’s bang searches, written in Babashka.
Features:
• Open the search-page (or get the url) of any of DDG’s ~14k bang searches
• List all bangs
• Additional (clj) bang searches: ghclj , grep and grepclj
• Create custom bang searches
#2023-11-0915:52Wernerhttps://github.com/wkok/openai-clojure v0.12.2 released
• (Beta) Added support for Assistants, Threads, Messages & Runs (thanks @sb)#2023-11-0916:22sbOpenAI DevDay SF https://openai.com/blog/new-models-and-developer-products-announced-at-devday#2023-11-0918:05emccueVery early builds of jresolve are now available.
• https://github.com/bowbahdoe/jresolve-cli
• https://github.com/bowbahdoe/jresolve-cli/actions/runs/6812941050
This is a dependency resolver just like exists in the clojure cli tools, but with a more generic JVM focus,
> java --class-path $(jresolve pkg:maven/org.clojure/
Tons of rough edges, but I would appreciate any feedback.#2023-11-0918:13jpmonettasinteresting, wdym with a more generic JVM focus?#2023-11-0918:15emccueWell if you run clj -Spath you by default get clojure on there, along with src. It also checks for configuration in global .edn files. You wouldn't want to use that for say, a pure Java project#2023-11-0918:16emccueThere is also, obviously, a "supply chain" dependence on clojure. Thats a non-issue for this part of the world, but if you are like me and think something like this should come with the JDK its an issue#2023-11-0918:17emccueI have a toy example project here showing how to use it with the standard jvm tools like javac and java
https://github.com/bowbahdoe/jresolve-example-simple/blob/main/Justfile#2023-11-0918:18emccue(not to mention that the clojure cli really just fills in the "class path" - totally fine for this part of the worlds, but in the java world you want to fill in the module path in addition or instead of the classpath)#2023-11-0918:18jpmonettasgot it, thanks!#2023-11-1017:11Shantanu Kumar@U3JH98J4R This is very cool! Thanks for the project. I filed an issue w.r.t. binary download for Ubuntu 20.04.#2023-11-1017:13emccue@U066J7E2U Thanks for taking a look! I think that probably is related to adding the --static flag at compilation. I don't have an ubuntu machine handy, so i'll probably ping you to try it out afterwards#2023-11-1017:51emccue@U066J7E2U Can you try this? https://github.com/bowbahdoe/jresolve-cli/actions/runs/6827995082#2023-11-1017:53Shantanu Kumar@U3JH98J4R This ^ new binary works for me.#2023-11-1017:54emccuegreat#2023-11-1020:29borkdudehttps://github.com/squint-cljs/squint: ClojureScript syntax to JavaScript compiler
#squint v0.4.39 now has an (incomplete) nREPL server for Node.js!
For latest changes since v0.3.33, see 🧵#2023-11-1020:30borkdudeDevelopments over the past month
https://github.com/squint-cljs/squint/blob/main/CHANGELOG.md#0439-2023-11-10
• Initial (incomplete!) nREPL server on Node.js: npx squint nrepl-server :port 1888
• Update/refactor https://github.com/squint-cljs/squint/blob/main/examples/threejs example
• https://github.com/squint-cljs/squint/issues/360: assoc-in! should not mutate objects in the middle if they already exist
• Evaluate lazy-seq body just once
• Avoid stackoverflow with min and max
• https://github.com/squint-cljs/squint/issues/360: fix assoc-in! with immutable objects in the middle
• Add mod, object?
• Optimize get
• Add https://github.com/squint-cljs/squint/blob/main/examples/threejs example
• https://github.com/squint-cljs/squint/issues/357: fix version in help text
• Fix iterating over objects
• Add clojure.string's triml, trimr, replace
• Fix examples/vite-react by adding public/index.html
• Add find, bounded-count, boolean?, merge-with, meta, with-meta, int?, ex-message, ex-cause, ex-info
• Fix munging of reserved symbols in function arguments
• https://github.com/squint-cljs/squint/issues/350: js* should default to :context :expr
• https://github.com/squint-cljs/squint/issues/352: fix zero? in return position
• Add NaN? (https://github.com/sher)
• https://github.com/squint-cljs/squint/issues/347: Add :pre and :post support in fn
• Add number?
• Support docstring in def
• Handle multipe source :paths in a more robust fashion
• https://github.com/squint-cljs/squint/issues/344: macros can't be used via aliases
#2023-11-1020:30borkdude#2023-11-1112:06Carsten Behringmsal-helper is available.
Just a bit of code I reuse to get access tokens non-interactive from Azure Identity
https://github.com/behrica/msal-helper#2023-11-1300:46grzmhttps://github.com/grzm/awyeah-api com.grzm/awyeah-api {:git/tag "v0.8.79", :git/sha "0399fec"} is available
• Catch up to aws-api 0.8.686 (2023-07-11)
• Also include aws-api refactoring commits up to 5900e35 (2023-07-12)#2023-11-1309:30Peter TaoussanisHi folks! I’m happy to announce the first public pre-release of my first all-new Clojure library in 7 years (!).
https://github.com/taoensso/tempel helps Clojure app devs easily protect their users’ data with end-to-end encryption + more.
Includes docs and examples for beginners.
Feedback very welcome, including on the docs. Please ping if anything is unclear, I’m hoping for Tempel to encourage more apps to encrypt user data when possible.
Thanks to Clojurists Together, Nubank and my https://github.com/sponsors/ptaoussanis#sponsors for support! 🙏#2023-11-1406:34grzmhttps://github.com/grzm/awyeah-api com.grzm/awyeah-api {:git/tag "v0.8.82", :git/sha "5ecad02"} is now available
• Implement aws-api cached-credentials-with-auto-refresh
#2023-11-1417:19Ranga RaoHi everyone, I’m Ranga Rao, co-founder of Fractl Inc. Our startup just came out of stealth (with product and funding) and we have open-sourced Fractl language and associated tools (compiler, runtime and REPL). We are a group of Clojurians who are building this and just wanted to share it, in case anyone here is interested in exploring more. We would love to hear your feedback too!
Note: Fractl is built on top of Clojure and exposes a dataflow-driven reactive programming model, with a functional core. Existing Clojure/Java libraries are compatible with Fractl.
What is unique about Fractl?
Gen AI-powered*: Fractl’s abstraction is closer to natural language than traditional programming languages, making it a better candidate as target language for AI-driven code generation.
No-code/Pro-code:* The high-level abstraction of Fractl and the data-oriented syntax makes it possible for developers to seamlessly go back and forth between traditional coding in IDEs and no-code building in our browser-based design studio (SaaS product).
Developers can seamlessly switch between Gen AI code-generation, no-code development and traditional programming (tri-modal development) throughout the development process. This unique approach bridges the huge chasm that exists between professional coding and low-code/no-code, while boosting productivity with Generative AI.
* Please feel free to give Fractl a try and checkout examples:https://github.com/fractl-io/fractl
* Learn more about us and what we offer:https://www.fractl.io#2023-11-1511:33Alvydas Vitkauskas@U012XE9CCNB Installed Fractl and tried the tutorial examples. It feels so nice to be building REST API in such a declarative way! Amazing! I’d like to ask you about the Websockets support in case I want a frontend be able to subscribe and listen to CRUD events on some entities. What would be the best way to do that with Fractl? Looks like Dataflow :after hooks could be a good place to push messages to the subscribed clients, but what about the Websockets server itself? Should it be made and run separatelly?
BTW: perhaps Fractl deserves its separate channel here on Clojurians?#2023-11-1512:26thomas+1 for the the separate channel#2023-11-1518:14Ranga Rao@U05E4BRHBCG, thanks for trying out Fractl. To experience the power of abstraction, I suggest using it for a reasonably complex app (with :contains relationship between entities and RBAC enabled). Our early users tell us that the combination of graph data model and role+ownership-based (similar to row-level, but much more powerful) access control help with making their app complete and very secure.#2023-11-1518:16Ranga RaoWe will support web sockets in an upcoming release within the next few weeks. Our intention is to support GraphQL too.#2023-11-1518:18Ranga RaoCreated #fractl channel (we also are on Discord at https://discord.gg/EEwqfbFR - looks like you already found us there) @U052852ES#2023-11-1519:34Alvydas VitkauskasActually, I’m just a hobbyist in dev (but with decades of experience in different languages and frameworks - as they say: professionals do what is needed, hobbyists - what they want ;)) and I do have in mind one quite complex project that I never had enough time to tackle seriously. With Fractl though giving a promiss of “100x quicker” - I could have a chance :) 🚀 #2023-11-1607:32jackrusherhttps://clojurians.slack.com/archives/C0FM7N1SM/p1700119906236009#2023-11-1612:13Ela NazariXiana framework released a new version with swagger-ui available. https://github.com/Flexiana/framework#2023-11-1613:07jpmonettasHi everybody! The https://github.com/flow-storm is happy to announce the first release of Clofidence, a test coverage tool for Clojure!
https://github.com/flow-storm/clofidence
The readme contains setup instructions and more.
As an example find in the thread the test coverage report for the ClojureScript compiler tests for version 1.11.60 if you
want to have a sense of what Clofidence is capable of.
As usual feedback is welcome.#2023-11-1613:08jpmonettas#2023-11-1613:19Ben SlessWhat are the chances to emit reports in cobertura's format? https://cobertura.github.io/cobertura/#2023-11-1613:21jpmonettasI never used that tool, is there a place to see what that format is about?#2023-11-1613:22Ben SlessFor some arcane reason gitlab CI can process coverage reports in that format, and only that format#2023-11-1613:23Ben Slesshttps://docs.gitlab.com/ee/ci/yaml/artifacts_reports.html#artifactsreportscoverage_report#2023-11-1613:30jpmonettasdo you have link to an example of a cobertura xml file? couldn't find one#2023-11-1614:44imreInteresting! Two questions:
1. How does this compare to cloverage?
2. Is there a way to use this with the kaocha test runner?#2023-11-1614:46Ben SlessI'm looking for examples, I remember there was a spec somewhere but obviously I can't find it now#2023-11-1614:49jpmonettas@U08BJGV6E For 1. tbh I can't compare it with Cloverage because when I tried it on my projects it crashed with methods being too large to instrument, and I couldn't get any reports. So I'm not sure of what the Cloverage reports looks like. If you have some at hand to share, we can maybe compare.
For 2. If you can run the tests by calling a function it should work. I guess the kaocha runner is just a function call with maybe some parameters, so I haven't try it but shouldn't be any problems.#2023-11-1614:54imreThank you, that's interesting - one problem we're having with Cloverage is exactly the method too large one#2023-11-1615:31imre:exec-args {:report-name "my-app"
:test-fn kaocha.runner/exec-fn
:test-fn-args [{}]}
for anyone wondering
Edit: doesn't work as exec-fn does a System/exit at the end#2023-11-1615:31jpmonettasClofidence can also hit the same issue, like any other instrumentation system since there is a limit on how big a JVM method can be, but since it is instrumenting at the compiler level I think the extra bytecode is as tight as it can. Also if it hits a method too large exception it will notify on the console and continue with the function uninstrumented#2023-11-1615:32imreI just managed to hit that yes. With cloverage I have around 16 such methods, with clofidence I got notified about 2#2023-11-1615:32jpmonettasmake sense#2023-11-1615:34jpmonettas@U08BJGV6E is there a way to make Cloverage work in those situations? last time I tried it was just crashing#2023-11-1615:37imreFor us it logs non-fatal errors to the console, somewhat less gracefully than clofidence, but it goes on and produces a report. It doesn't however state (unline clofidence) how it proceeds with the un-instrumentable form so that's a bit of an unknown to us at the moment, but tests results don't change between no instrumentation/instrumentation with said errors/instrumentation with exclusions set up for the difficult forms.#2023-11-1615:38imreRight now we maintain a list of exclusions just so we are in better control of what happens#2023-11-1615:46imretests seem to take a lot more time with clofidence than cloverage, at least in our case#2023-11-1615:47jpmonettasYeah, so I was able to run Cloverage on one of my projects and since you asked for differences, one I see is that Cloverage seems line based, while Clofidence is expression based, maybe that is why. Also I haven't done any perf passes yet#2023-11-1615:48jpmonettasI'm not sure how Cloverage reports when you have a bunch of expressions on the same line but only some of them executed#2023-11-1615:51imreCloverage's output (at least in our case) has both form- and line based data#2023-11-1615:52imrehere's a sample#2023-11-1615:52imreBut I don't know any of its internals so wouldn't be able to comment on the tech differences#2023-11-1615:53jpmonettasbut I mean like this#2023-11-1615:53jpmonettashere you can see that normalize-gensyms branch wasn't take#2023-11-1615:55jpmonettasoh, I see that is has splited it in multiple lines, not sure if it always does that#2023-11-1615:58imreNot sure about that#2023-11-1615:59imreOkay, looks like my first kaocha approach didn't work as exec-fn does a system/exit at the very end so I end up with no coverage report 😛#2023-11-1615:59jpmonettasXD#2023-11-1616:00jpmonettassame happened to me when I ran the ClojureScript tests, there was a System/exit as the last step, had to run all over again facepalm#2023-11-1616:00imreprobably need a kaocha plugin to make that work as kaocha likes to be on the outside https://github.com/lambdaisland/kaocha-cloverage/blob/main/src/kaocha/plugin/cloverage.clj#2023-11-1616:03jpmonettasyeah, there lots of things to work on, stuff like that, and also there is room for many features. Another nice thing is the entire project is like 200 LOC, with another 200 I copied from FlowStorm to pprint the forms that I'll be moving to a lib soon#2023-11-1616:03imreI have managed to do kaocha inside the polylith test runner but it took sigificant work#2023-11-1616:03imrenice#2023-11-1616:04imreI noticed that clofidence uses a custom clojure compiler underneath. How closely does that follow the official one? How clofident I can be that if I run tests through that, my system will work the same way when it is executed in production using the official compiler?#2023-11-1616:06jpmonettasyeah, so ClojureStorm is tracking the official Clojure compiler, just adding some extra bytecode for tracing expressions, fn calls, etc. So it is the same compiler. Of course there could be bugs, but it has been in use for some time with FlowStorm#2023-11-1616:07jpmonettasAlso I'm not using it for running tests, I think the tests should be run with the official compiler, this is low risk only, just for dev stuff like debugging, coverage, etc#2023-11-1616:10imreHmm so in CI you recommend executing tests twice, once with coverage off, using the official compiler and once with coverage on?#2023-11-1616:10jpmonettasI mean, you choose, but same thing happens with cloverage, it is changing your code by an instrumented one, so how confident can you be that it doesn't change code's behavior#2023-11-1616:11imreYeah, true that#2023-11-1616:15imreThis bit is interesting:
Which forms are included in the report?
By default only forms with the first symbol name being one of : defn, defn-, defmethod, extend-type, extend-protocol, deftype and defrecord.
If you have other types of forms like the ones defined by some macros, you can include them by using :extra-forms in the configuration parameters. It takes a set of symbols like :extra-forms #{defroutes my-macro}.
So the methods that were found too large by clofidence in my code are defined by a custom macro, which is somewhat surprising as I haven't specified :extra-forms for the run. The custom macro expands to a couple of defns however, could this have something to do with it?#2023-11-1616:20jpmonettasso, it is instrumenting all of them, just not including them on the report#2023-11-1616:23imreOh. There must be a reason for that. Also, is there a way to include everything instrumented in the report and perhaps have a blocklist instead of an allowlist?#2023-11-1616:24jpmonettascurrently there isn't but sure, it can be added pretty easily#2023-11-1616:24jpmonettasthis is so the report doesn't include things like deftest forms if you weren't able to skip them with the ns prefix instrumentation#2023-11-1616:25jpmonettasmaybe it is also slower because it is currently instrumenting the tests forms probably, unless you have all your tests under my-app.tests. so you can skip#2023-11-1616:26jpmonettasthere is a ton of room for improvements in all this aspects for sure#2023-11-1616:28imreI normally have a namespace suffix for tests, I think that's more or less standard in clojure#2023-11-1616:29jpmonettasyeah, I should improve ClojureStorm ns instrumentation by regex instead of prefix as it is now, which is much more powerful#2023-11-1616:34imreI'll be following this project with great interest. Thank you!#2023-11-1616:35jpmonettasif you have any ideas also, feel free to open issues or show up in #C03KZ3XT0CF to discuss them#2023-11-1616:37imreI can open one about this filtering thing for sure just for the sake of documentation#2023-11-1616:48imrehttps://github.com/flow-storm/clofidence/issues/1#2023-11-1616:49jpmonettasthanks!!#2023-11-1617:45Ben SlessWhat about cases where users use add-test or with-test?#2023-11-1617:46Ben SlessI wonder if anyone uses those#2023-11-1618:02jpmonettas@UK0810AQ2 sorry, what is add-test and how do you think it could be affected?#2023-11-1618:03Ben Slessyou mentioned:
this is so the report doesn't include things like deftest forms if you weren't able to skip them with the ns prefix instrumentation
So I was wondering about code in forms like add-test or with-test that add the test metadata to an existing var, how they'd interact with the system#2023-11-1618:08jpmonettasso, this will instrument all the code that matches the instrumentOnlyPrefixes and then run whatever your test-fn runs, and collect the coordinates that were hit per form.. The thing you mention there is what forms should be displayed on the final report. That is so you don't display forms like (deftest ....) which you are probably not interested in. If a form starts with (add-test ...) for example, it wont be displayed in the report, but you can add them using the :extra-forms key